資料結構學習筆記 棧的順序儲存(C語言實現)

2021-08-15 18:13:20 字數 1455 閱讀 8100

棧的模式是後進先出,就是最後插入的在最上面。其原理就乙個只在表尾進行插入和刪除的線性表。把允許插入的一端叫做棧頂,另一端叫做棧尾。資料數量在一定範圍內推薦使用順序棧,反之則使用鏈棧

棧作為一種特殊的線性表,也擁有順序儲存和鏈式儲存。下面為順序儲存(該順序表忘記定義表長度了,只定義了陣列長度):

#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 棧(順序棧)

三.實現 棧是一種僅在表尾進行插入或者刪除操作的線性表。且表的首尾兩端都有特殊的含義 表頭我們一般稱為棧底,表尾 最後乙個元素的位置 稱為棧頂,不含元素或者棧底 棧頂的棧,我們稱之為空棧。所以,棧是一種先進後出的表結構。這種情況,和我們的火車排程站非常相似。因為棧的內部儲存結構,可以用順序結構,也可...