【数据结构基础笔记】【栈】
代碼參考《妙趣橫生的算法.C語言實現(xiàn)》
文章目錄
- 前言
- 1、棧的定義
- 2、創(chuàng)建一個棧
- 3、入棧和出棧操作
- 4、棧的清空、銷毀、計算棧的當前容量
- 5、實例分析
前言
本章總結:棧的定義、創(chuàng)建棧,銷毀棧,入棧出棧操作等操作。
1、棧的定義
棧是一種重要的線性結構。是鏈表和順序表的具體形式。
stack是一個后進先出的線性表。棧的操作只能限定在這個順序表的表尾進行,我們稱這個地方為棧頂(top),相應的表頭稱為棧底(bottom)
最開始棧中不含有任何數(shù)據(jù),叫做空棧,此時棧頂就是棧底。數(shù)據(jù)從棧頂進入,棧頂棧底分離,棧的容量變大。數(shù)據(jù)出棧時從棧頂彈出,棧頂下移,整個棧的當前容量變小。
用順序表建立棧:
typedef struct {ElemType *base; //指向棧底的指針ElemType *top; //指向棧頂?shù)闹羔?/span>int stacksize; //當前可使用的最大容量 }sqStack;2、創(chuàng)建一個棧
1、在內存中開辟一段連續(xù)的空間,用作棧的物理存儲空間;
2、將棧頂、棧底的地址賦值給top和base,并設置stacksize,以便通過這個變量對棧進行各種操作
3、入棧和出棧操作
入棧:每向棧中壓入一個數(shù)據(jù),top指針+1,直到棧滿為止
//入棧 #define STACKINCREMENT 10 void PushStack(sqStack* s,ElemType elem) {if (s->top - s->base >= s->stacksize) //判斷棧是否滿了{//如果棧滿了,追加空間s->base = (ElemType*)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(ElemType));if (!s->base) //內存分配失敗{printf("內存分配失敗");exit(0);}s->top = s->base + s->stacksize;s->stacksize = s->stacksize + STACKINCREMENT; //重置棧的最大容量}*(s->top) = elem; //放入數(shù)據(jù)s->top++; //top指針+1 }出棧操作就是棧頂(指針先下移指向棧頂元素)取出元素,棧頂指針隨之下移的操作。可以重復出棧,直道該棧變?yōu)榭諚橹?/p> //出棧操作 void PopStack(sqStack* s, ElemType *elem) {if (s->top == s->base) return; //棧空了,程序返回s->top--; //top指針-1*elem = *(s->top); //將棧頂元素取出,給elem }
4、棧的清空、銷毀、計算棧的當前容量
1、清空一個棧就是希望棧中的元素全部作廢,而棧本身的物理空間不一定發(fā)生變化。
因此只需要將s->top的內容賦值為s->base即可
2、銷毀一個棧是要釋放掉該棧所占據(jù)的物理內存空間,因此銷毀與清空棧是兩個不同的操作。
5、實例分析
利用棧的數(shù)據(jù)結構,將二進制轉換為十進制:
已知公式為:
思路:將一串二進制的0/1碼,從高位到低位順序入棧,再逐一從棧頂取出元素,取出的第i個元素乘上2的i-1次方,并逐一累加,最終得到十進制表達。
reslut:
總結
以上是生活随笔為你收集整理的【数据结构基础笔记】【栈】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 婚车多少钱一辆啊?
- 下一篇: 【数据结构基础笔记】【队列】