順序棧 [cpp] #include<stdio.h> //初始化棧[順序棧] void initStack(SeqStack * s) { s->top=-1; } //進棧 int push(SeqStack *s,StackElementType x) { if(s->top == Stack_size-1) { return false; } s->top++; s->elem[s->top]=x; return true; } //出棧 int Pop(SeqStack *s,StackElementType *x) { if(s->top==-1) { return false; }else { *x=s->elem[s->top]; s->top--; return true; } } //取棧頂元素 int GetTop(SeqStack *s,StackElementType *x) { if(s->top==-1) { return false; }else { *x=s->elem[s->s->top]; return true; } } int main(void) { return 0; } 鏈棧 [cpp] #include<stdio.h> typedef struct node { StackElementType data; struct node *next; }LinkStackNode; typedef LinkStackNode * LinkStack; //進棧【鏈棧】 int push(SeqStack top,StackElementType x) { LinkStackNode * temp; temp = (LinkStackNode)malloc(sizeof(LinkStackNode)); if(temp==NULL)//申請空間失敗 return false; temp->data=x; temp->next=top->next; top->next=temp; return true; } //出棧【鏈棧】 int Pop(SeqStack top,StackElementType *x) { LinkStackNode * temp; temp=top->next; if(temp==NULL)//棧為空 return false; top->next=temp->next; *x=temp->data; free(temp); return true; } int main(void) { return 0; } 括號匹配算法 [cpp] #include<stdio.h> //括號匹配算法 void BracketMatch(char *str)//參數為輸入的字符串 { Stack s,int i,char ch; InitStack(&s); for(i=0;str[i]!='\0';i++) { switch(str[i]) { case '(': case '[': case '{': Push(&s,str[i]); break; case ')': case ']': case '}': if(IsEmpty(&s)) { printf("右括號多余"); return; }else { GetTop(&s,&ch); if(Match(ch,str[i])) Pop(&s,&ch); else printf("對應的括號不同類"); } www.2cto.com } } if(IsEmpty(&s)) printf("括號匹配"); else printf("括號不匹配"); } int main(void) { return 0; }