定義
棧是限制插入和刪除只能在乙個位置的上進行的表(→叫做後進先出表),該位置是表的末端,叫做棧頂。對棧的基本操作是push(入棧)和pop(出棧),前者是插入元素到棧頂,後者是將棧頂元素刪除
棧的應用
1.平衡符號:編譯器檢查程式的語法錯誤,看看一些符號是否匹配如「()」是匹配的,而「[(])」是不匹配的
2.計算字尾表示式:在輸入表示式過程中,遇到運算元就入棧,遇到操作符就從棧中彈出兩個運算元進行運算,然後將結果壓入 棧中,當輸入完成後,棧頂即使計算結果
3.中綴表示式轉字尾表達:這個涉及運算子的優先順序,通過一系列進棧出棧,完成轉換
4.函式呼叫:函式呼叫的內部實現就是通過棧來完成的
棧的實現
由於棧是乙個表,所以實現表的方法都可以用於實現棧,一種是陣列,一種是鍊錶,使用陣列需要提前宣告乙個已知大小的陣列,如果宣告過大,會造成空間的浪費,所以節省的做法是使用鍊錶
下面是棧的鍊錶實現,我們讓表的前端作為棧頂
標頭檔案stack.h
struct node;
typedef struct node *ptrtonode;
typedef struct node *stack;
typedef int element;
//建立棧
ptrtonode createstack();
//判斷棧是否為空
int isempty(stack s);
//出棧
void pop(stack s);
//入棧
void push(stack s,element e);
//清空棧
void makeempty(stack s);
//返回棧頂元素
element top(stack s);
//銷毀棧
void destorystack(stack &s);
具體實現
#include#include#include "stack.h"
struct node;
//建立棧
stack createstack()
s->next=null;
return s;
}//判斷棧是否為空
int isempty(stack s)
//出棧
void pop(stack s)
if(!isempty(s))
else
}//入棧
void push(stack s,element e)
else
}//清空棧
void makeempty(stack s)
while(s->next!=null)
}//返回棧頂元素
element top(stack s)
if(!isempty(s))
return s->next->data;
printf("the stack is empty\n");
return 0;
}//銷毀棧
void destorystack(stack &s)
}
測試
#include #include "stack.h"
int main()
destorystack(s);
return 0;
}
資料結構之棧實現
ps 棧用類實現比較好,可以同時管理多種資料結構。不過對於剛剛接觸的我來說,就看著數,按著書上的流程走吧。我會盡力把棧的特點講解清楚,以後有了更深入的了解,我會再來補充的。逆波蘭表示法 是一種將運算子寫在運算元後面的描述程式 算式 的方法。舉個例子,我們平常用中綴表示法描述的算式 1 2 5 4 改...
資料結構之陣列實現棧結構
include include int top int s 返回棧頂位置 int stack empty int s 判斷棧是否為空 int stack full int s 判斷棧是否已滿 void push int s,int x int pop int s return x int main ...
資料結構之ArrayStack棧結構實現思路
首先宣告個arraylist。private arraylist data 接著宣告兩個構造方法,將arraylist結構封裝成 arraystack結構 public arraystack public arraystack int capacity public inte ce stack 獲取...