資料結構之棧的實現

2021-08-20 06:11:41 字數 1725 閱讀 5252

定義

棧是限制插入和刪除只能在乙個位置的上進行的表(→叫做後進先出表),該位置是表的末端,叫做棧頂。對棧的基本操作是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 獲取...