貪心Prim算法生成樹問題C實現代碼

cwf8 9年前發布 | 4K 次閱讀 C/C++ 算法

    #include <stdio.h>

 #include <stdlib.h>   
#define STACK_INIT_SIZE 20  
#define STACKINCREMENT 10  
typedef  char ElemType;  
typedef struct{  

       ElemType *base;  

       ElemType *top;  

     int stacksize;  

 }sqStack;  

 /*初始化棧*/  

  void initStack(sqStack *s)  

   {  

      /*內存中開辟一段連續空間作為棧空間,首地址賦值給s->base*/  

     s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));  

      if(!s->base) exit(0);                    /*分配空間失敗*/  

       s->top = s->base;                    /*最開始,棧頂就是棧底*/  

      s->stacksize = STACK_INIT_SIZE;        /*最大容量為STACK_INIT_SIZE */  

   }  

 /*入棧操作,將e壓入棧中*/  

 void Push(sqStack *s, ElemType e){  

    if(s->top - s->base >= s->stacksize){  

       /*棧滿,追加空間*/  

      s->base = (ElemType *)realloc(s->base, (s->stacksize +  

     STACKINCREMENT)*sizeof(ElemType));  

     if(!s->base) exit(0);                                /*存儲分配失敗*/  

       s->top = s->base + s->stacksize;  

      s->stacksize = s->stacksize + STACKINCREMENT;        /*設置棧的最大容量*/  

      }  

      *(s->top) = e;                                    /*放入數據*/  

          s->top++;  

  }  

  /*出棧操作,用e將棧頂元素返回*/  

   void Pop(sqStack *s , ElemType *e){  

     if(s->top == s->base) return;  

    *e = *--(s->top);  

   }  



 /*計算堆棧s當前的長度*/  

   int StackLen(sqStack s){  

      return (s.top - s.base) ;  

 }  
int match(char e,char c)  
{  
    if(e=='('&&c==')')  
        return 1;  
    if(e=='['&&c==']')  
        return 1;  
    return 0;  
}  
void main()  
{  
    sqStack s;  
    char c,e;  
    initStack(&s);  
    scanf("%c",&c);  
    while(c!='#')  
    {  
        if(!StackLen(s))  
            Push(&s,c);  
        else  
        {  
            Pop(&s,&e);  
            if(!match(e,c))  
            {  
                Push(&s,e);  
                Push(&s,c);  
            }  
        }  
        scanf("%c",&c);  
    }  
    if(!StackLen(s))  
        printf("The brackets are matched\n");  
    else  
        printf("The brackets are not matched\n");  

}  </pre> 


 本文由用戶 cwf8 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!