【数据结构与算法】栈的介绍及基本运算(出栈、入栈、销毁栈等)
一、棧的介紹
棧(Stack)是限定只能在表的一端進行插入和刪除操作的線性表。
允許插入和刪除運算的一端稱作棧頂(top)。
不允許插入和刪除的另一端稱作棧底(bottom)。
在棧頂進行的插入操作稱為入棧或進棧(push)
在棧頂進行的刪除操作稱為出棧或退棧(pop)
棧的特點:后進先出,即 LIFO(Last In First Out)
如下圖:
順序棧的數據類型
靜態分配:
MaxSize為順序棧的最大容量;
top為棧頂元素的下標,0 <= top <= MaxSize-1
棧空:top = -1;
棧滿:top = MaxSize-1
注意棧空和棧滿的判斷條件,如上圖,棧頂top = 0 時,有數據元素a1,所以top = -1時,才能判斷棧空。棧滿時,由上圖看知。
動態分配:
#define int ElemType typedef struct { ElemType *base; //棧底的指針ElemType *top; //棧頂的指針 } SqStack; // 順序棧數據類型鏈式棧的數據型
typedef struct LNode {ElemType data; //數據域struct LNode *next; //后繼結點指針 } LinkStNode; //鏈棧結點類型S:單鏈表頭指針,指向頭結點。
棧頂:單鏈表第一個元素結點的位置,即頭結點的后一個位置。
二、順序棧的基本運算
1、初始化棧
建立一個新的空棧s,實際上是將棧頂指示變量置-1即可。
2、入棧:
①判斷棧是否已滿,若滿則產生上溢出錯誤,退出算法,否則執行第②步;
②棧頂下標增一(top++),指向新的棧頂位置;
③將新元素置于棧頂。
3、出棧:
①判斷棧是否為空,若空則產生下溢出錯誤,退出算法,否則執行第②步;
②棧頂元素出棧;
③棧頂下標減一(top++),指向新的棧頂位置;
4、判斷棧是否為空
棧S為空的條件是s.top==-1。
5、取棧頂元素
在棧不為空的條件下,將棧頂元素賦給e。
注意:
取棧頂元素和出棧不同,取棧頂元素只是把棧頂元素復制一份,棧頂指針并沒有改變。如下圖:
入棧時要判斷棧是否滿,出棧時要判斷是否為空。
三、鏈式棧的基本運算
1、初始化棧
建立一個空棧s。實際上是創建鏈棧的頭結點,并將其next域置為NULL。
2、入棧:
bool Push(LinkStNode *S, ElemType item) { //帶頭結點單鏈表的表頭插入法LinkStNode *t = new LinkStNode; //①生成新結點if (t == NULL){cout << "內存不足";return false;}t->data = item;//②在棧頂插入新結點t->next = S->next;S->next = t; //③return true; }
3、出棧:
4、銷毀棧
5、判斷棧是否為空
棧S為空的條件是s->next==NULL,即單鏈表中沒有數據結點。
6、取棧頂元素
int GetTop(SNode *s,DataType &e) { if (s->next==NULL) //棧空的情況{return 0;}e=s->next->data;return 1; }總結
以上是生活随笔為你收集整理的【数据结构与算法】栈的介绍及基本运算(出栈、入栈、销毁栈等)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Loadrunner安装与破解
- 下一篇: selenium等待时间处理