貪心Prim算法生成樹問題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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!