資料結構 鏈棧實現括號匹配

2021-09-29 03:29:37 字數 1443 閱讀 9015

最近在學資料結構,所以發的大多數都是關於資料結構的題

括號匹配原來用動態規劃做的一道題,現在老師要用棧來實現,用就用吧,還不讓用函式,只能用鏈棧,不開森

很簡單的思路,如果是』(』 『』 『]』,就看棧頂元素是否匹配,匹配就往下操作,如果表示式完了,棧不為空,不匹配;如果棧空了,表示匹配

下面是**的實現

#include #include #include //用雙結構體儲存資料

typedef struct node

node,*pnode;

typedef struct stack

stack,*pstack;

//雖然用不了這麼多函式,還是順便實現了

void init(pstack);//初始化函式

void push(pstack s,int val);//入棧操作

void prints(pstack s);//列印棧

int pop(pstack s,int *p);//出棧操作

int empty(pstack s);//判空

void clear(pstack s);//清空

int getlength(pstack s);//取得棧的長度

int main()

的括號表示式:\n");

gets(ch);

while(*p)

': case ']':

case ')':

pop(&s,&e); //右括號出棧

if((e=='')||(e=='['&&*p==']')||(e=='('&&*p==')'))

p++;

else

break;

default: //其他字元就後移

p++;

} }if(empty(&s))

printf("括號匹配成功");

else

printf("缺少右括號");

return 0;

}void init(pstack s)

else }

int getlength(pstack s)

return count;

}void push(pstack s,int val)

void prints(pstack s)

while(p->next!=null)

printf("\n");

}int empty(pstack s)

int pop(pstack s,int *val)

else }

void clear(pstack s)

else

s->top = s->base;

}}

下面是**的實現結果

資料結構 棧實現括號匹配

真正學習之後,才發現那些所謂的大嬸不過是多用功了些。不知道以前為什麼不親自動手做做,原來這麼簡單。include include include include 棧的鏈式儲存 typedef struct data typedef struct stack 初始化空棧 void initstack ...

資料結構(二) 棧及實現 括號匹配

一 棧的概念與特點 一種特殊的線性表,它的插入和刪除運算均在同一端進行。這一端被稱為棧頂,另一端為棧底,插入稱為進棧,刪除稱為出棧。有後進先出的性質。棧頂top相當於順序表中的size,即元素個數。關於順序表可以參考資料結構 一 順序表及實現 注 沒有a n 這個元素。n是元素的數量 二 棧的操作及...

鏈棧實現括號匹配演算法

封裝好棧的基本操作 初始化,出棧,入棧,判斷棧空。用字元陣列儲存使用者輸入的括號系列,遍歷陣列,如果是左括號就入棧,否則就彈出棧頂元素,將彈出的元素與該括號進行判斷,若匹配則掃瞄下乙個括號,如果匹配失敗,演算法結束,提示失敗。掃瞄完所有字元後,如果棧非空,說明匹配失敗。typedef struct ...