棧的模式是後進先出,就是最後插入的在最上面。其原理就乙個只在表尾進行插入和刪除的線性表。把允許插入的一端叫做棧頂,另一端叫做棧尾。資料數量在一定範圍內推薦使用順序棧,反之則使用鏈棧
棧作為一種特殊的線性表,也擁有順序儲存和鏈式儲存。下面為順序儲存(該順序表忘記定義表長度了,只定義了陣列長度):
#include #include #define stacksize 5
typedef int seletype;
typedef structstacklist;
//初始化棧,棧頂指向陣列最後面的資料下標
stacklist init()
//清空棧
void cleanslist(stacklist *s)
//判斷該棧是否為空
int stackempty(stacklist s)else
}//獲取棧頂元素
void gettop(stacklist s,seletype *e)
//獲取棧元素的個數
int stacklength(stacklist s)
void insertele(stacklist *s,seletype e)else
}void deleteele(stacklist *s,seletype *e)else
}int main()
像這種順序棧有一些缺陷,就是當棧滿時,不能改變棧的大小,所以只能盡量給適當大小的空間,但還是會造成空間的浪費或不足,這時就可以讓兩個棧存在乙個陣列中,棧頂分別在陣列的兩端,向棧插入資料時,兩個棧頂之間的距離會越來越小,直至棧滿。像這種就叫做兩棧共享空間。通常都是當兩個棧的空間大小有相反關係時,才會使用這個共享空間棧。
#include #include #define dstacksize 10
typedef int dseletype;
typedef structdstacklist;
//兩棧共享空間初始化,兩個棧都為空,所以第乙個棧的棧頂為-1,第二個棧的棧頂為陣列最大長度
dstacklist initd()
//需要指定要插入的棧
void insertdsele(dstacklist *ds,dseletype dse,int stacknumber)elseelse if(stacknumber==2)
}}//刪除時同樣需指定棧
void deletedsele(dstacklist *ds,dseletype *dse,int stacknumber)elseelse if(stacknumber==2)
}}void getdtop(dstacklist ds,dseletype *dse,int stacknumber)elseelse if(stacknumber==2)
}}void main()
資料結構學習筆記 棧
它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。p...
資料結構學習筆記 棧
1.定義 棧 stack 是限定僅在表尾進行插入和刪除操作的線性表。根據定義我們知道棧在本質上也是一種線性表,只是在插入和刪除操作上進行了限制。我們把允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 不含任何元素的棧稱為空棧。棧又稱為後進先出 last in first out 的...
資料結構學習記錄5 棧(順序棧)
三.實現 棧是一種僅在表尾進行插入或者刪除操作的線性表。且表的首尾兩端都有特殊的含義 表頭我們一般稱為棧底,表尾 最後乙個元素的位置 稱為棧頂,不含元素或者棧底 棧頂的棧,我們稱之為空棧。所以,棧是一種先進後出的表結構。這種情況,和我們的火車排程站非常相似。因為棧的內部儲存結構,可以用順序結構,也可...