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

2021-05-28 06:36:46 字數 2089 閱讀 7996

一、棧的概念與特點

一種特殊的線性表,它的插入和刪除運算均在同一端進行。這一端被稱為棧頂,另一端為棧底,插入稱為進棧,刪除稱為出棧。有後進先出的性質。棧頂top相當於順序表中的size,即元素個數。關於順序表可以參考資料結構(一)——順序表及實現 。

[注]沒有a[n]這個元素。n是元素的數量

二、棧的操作及實現

1、結構體定義

2、初始化

3、判斷是否為空

4、取得棧頂值

5、入棧操作

6、出棧操作

7、列印棧的內容

1、結構體定義

#define length 100

#include#includetypedef char datatype;

typedef struct sequence_stacksequence_stack;

2、初始化

#include"stack.h"

void init_sequence_stack(sequence_stack *st)

3、判斷是否為空

#include"stack.h"

int is_empty_sequence_stack(sequence_stack *st)

4、取得棧頂值

#include"stack.h"

datatype get_top(sequence_stack *st)else

}

5、入棧操作

#include"stack.h"

void push(sequence_stack *st,datatype x)else

}

6、出棧操作

#include"stack.h"

datatype pop(sequence_stack *st)else

}

7、列印棧的內容

#include"stack.h"

void display_sequcence_stack(sequence_stack *st)else}}

三、棧的應用舉例

括號匹配:檢驗表示式中的括號是否匹配

#include#include"stack.h"

void compare(sequence_stack *,datatype);

int main()':

compare(stack,'

}if(is_empty_sequence_stack(stack))else

return 0;

}void compare(sequence_stack *stack,datatype data)else

pop(stack);

}

除錯執行:

[fsy@localhost stack]$ gcc `ls stack*` bracket_match.c -o bracket_match -g

[fsy@localhost stack]$ ./bracket_match

please input the express: abcaaa

the bracket compare!

[fsy@localhost stack]$ ./bracket_match

please input the express: s]s}

the bracket doesn't compare!

[fsy@localhost stack]$ ./bracket_match

please input the express:

the bracket doesn't compare!

[fsy@localhost stack]$

資料結構 棧實現括號匹配

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

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

最近在學資料結構,所以發的大多數都是關於資料結構的題 括號匹配原來用動態規劃做的一道題,現在老師要用棧來實現,用就用吧,還不讓用函式,只能用鏈棧,不開森 很簡單的思路,如果是 就看棧頂元素是否匹配,匹配就往下操作,如果表示式完了,棧不為空,不匹配 如果棧空了,表示匹配 下面是 的實現 include...

資料結構與演算法 棧及利用棧實現簡單括號匹配

棧 一種有次序的資料項集合,在棧中,資料項的加入和移除 都僅發生在同一端,距離棧底越近的資料項,留在棧中的時間 就越長。這種次序通常稱為 後進先出lifo last in first out 利用棧實現簡單括號匹配 遇到左括號則入棧 s.push symbol else 遇到右括號時,棧為空,則說明...