當前位置:編程學習大全網 - 編程軟體 - 數據結構編程題(c語言)

數據結構編程題(c語言)

因為妳這個題目是到所輸入符號跟棧頂元素不匹配時才結束的.

所以用順序棧有可能發生上溢現象,因此在這裏我用鏈式棧來解決這個問題

代碼如下:

#include <stdio.h>

#include <stdlib.h>

#define len sizeof(stack)

typedef struct node

{

char c;

struct node* next;

}stack,*link;

link push(link s,char c); //進棧

link pop(link s); //出棧

int main ()

{

int flag=1; //初始化為1,表示輸入的符號是匹配的

char c,top;

link s=NULL; //置空棧

while(1)

{

scanf("%c",&c);

switch(c)

{

case '[':

case '{':

case '(':

s=push(s,c);

break;

case ']':

case '}':

case ')':

top=s->c; //取得棧頂跟c比較

if((top=='['&&c==']')||(top=='{'&&c=='}')||(top=='('&&c==')')) //判斷棧頂元素是否與c相同

s=pop(s);

else

flag=0; //不想同則改變標誌flag的值

break;

}

if(!flag) //如果flag非真,則表示符號不匹配,顯示相關信息並退出,否則繼續輸入

{

printf("符號不匹配!\n");

break;

}

}

return 0;

}

link push(link s,char c)

{

link p;

p=(link)malloc(len);

//進棧操作其實用的就是不帶頭結點的頭插法建立壹個單鏈表

p->c=c;

p->next=s;

s=p; //更新棧頂

return s; //返回新棧頂

}

link pop(link s)

{

link p;

p=s; //保存原棧頂

s=s->next; //更新棧頂

free(p); //刪除原棧頂

return s;

}

  • 上一篇:開發壹個手機聊天app需要什麽軟件?
  • 下一篇:壹般焊工技術要學多久?
  • copyright 2024編程學習大全網