一、棧的概念與特點
一種特殊的線性表,它的插入和刪除運算均在同一端進行。這一端被稱為棧頂,另一端為棧底,插入稱為進棧,刪除稱為出棧。有後進先出的性質。棧頂top相當於順序表中的size,即元素個數。關於順序表可以參考資料結構(一)——順序表及實現 。二、棧的操作及實現[注]沒有a[n]這個元素。n是元素的數量
1、結構體定義1、結構體定義2、初始化
3、判斷是否為空
4、取得棧頂值
5、入棧操作
6、出棧操作
7、列印棧的內容
#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 遇到右括號時,棧為空,則說明...