資料結構遍歷順序棧 資料結構 順序棧的實現

2021-10-17 06:29:23 字數 2302 閱讀 4564

資料結構:順序棧的實現

1、快速開始

棧是一種遵循元素後進(push)先出(pop)規則的線性表,即最後加入的元素最先出來,它的實現可以用陣列或者鍊錶。

它的特點如下:

**先出,先入後出。

除了頭尾節點之外,每乙個元素有乙個前驅,有乙個後繼。

2、實現棧

我們已經說過了,棧是一種線性表,故其底層是基於陣列或者鍊錶的。那麼,我們的重點是維護一種規則,即後進先出。

我們始終要有乙個變數l來記錄最後乙個元素的位置:

當壓入時,將新元素插入到l位置之後,然後更新l,即l+1.

當彈出時,將l位置元素進行刪除,然後更新l,即l-1。

也正是因為,我們使用的是線性表,正好可以利用其尺寸來表示l,即線性表的大小可以表示最後乙個元素的位置。

2.1、棧的實現

class mystack sqstack;

說明:1.base表示棧底指標,在判斷出棧、初始化和重新分配空間的時候需要用到。

2.top表示棧頂指標,是棧最關鍵和核心的組成,入棧時top向上移動,出棧時top向下移動。

3.此處的stacksize並不表示當前的棧中的元素數量,而是表示棧的容量,也就是能裝多少個元素。

3.2、初始化棧:

int initstack(sqsatck *s)

s->base=(int*)malloc(100*sizeof(int));

if(!s)

return 0; //0代表操作失敗

s->top=s->base;

stacksize=100;

return 1; //1代表操作完成

說明:1.順序棧初始化無非就是給棧分配連續的記憶體空間,base是棧底指標,在上面提到過,它用來指示一段連續的記憶體空間的首位址,也就是用來初始化。

2.分配空間不意味著一定會有那麼多空間,所以判斷也不可缺少。

3.分配空間後,base和top的位址應該一致,此時top還沒有移動。

3.3、壓棧

int push(sqstack * s,int elem)

if(s->top-s->base>=s->stacksize)

s->base=(selemtype *)

realloc(s->base,(s->stacksize+10)*sizeof(selemtype)); //10代表增量,你可以使用巨集定義,方便後續修改。

if(!s->base)

return 0;

s->top=s->base+s->stacksize;

s->stacksize+=10

*s->top++=elem;

return 1;

說明:1.壓棧是棧的核心操作,關鍵步驟無非是*s->top++=elem;但是在進行此步操作時,一定要判斷棧是否超出容量。

2.如果棧超出容量,則要在進行原空間的基礎上重新分配空間,realloc是關鍵的命令。

realloc

原型:extern void *realloc(void *mem_address, unsigned int newsize);

用法:#include 有些編譯器需要#include

功能:改變mem_address所指記憶體區域的大小為newsize長度。

說明:如果重新分配成功則返回指向被分配記憶體的指標,否則返回空指標null。

當記憶體不再使用時,應使用free()函式將記憶體塊釋放。

3.分配空間以後,在修改stacksize之前,top應該保持在容量頂端,s->top=s->base+s->stacksize;

2.4出棧

int pop(sqstack *q)

if(s->top==s->base)

return 0;

return *s->--top;;

說明:1.出棧是簡單操作,其實這裡並沒有完美的實現這個效果,你應該考慮到如果在擴容後又迅速減小,會造成大量的空間浪費。

2.5遍歷棧

int printfstack(sqstack *s)

int *p=s->base;

puts("輸出棧");

for(p;p!=s->top;p++)

printf("***%d",*p);

資料結構 順序棧

編寫乙個程式,實現順序棧 假設棧中元素型別為char 的各種基本運算。並完成下面功能 1 初始化棧s 2 判斷棧s是否非空 3 依次進棧元素a,b,c,d,e 4 判斷棧s是否非空 5 輸出棧長度 6 輸出從棧頂到棧底元素 7 輸出出棧序列 8 判斷棧s是否非空 9 釋放棧。include incl...

資料結構 順序棧

構造乙個順序棧 當輸入9999時,結束入棧操作 輸出棧中元素,顯示棧頂元素,刪除棧頂元素 include include include define stack init size 100 define ok 1 define error 0 typedef int selemtype 順序棧結構...

資料結構 順序棧

棧是一種只能在一端進行插入或刪除操作的線性表。其中允許進行插入或刪除操作的一端稱為棧頂 top 棧頂是由乙個稱為棧頂指標的位置指示器來指示,它是動態變化的。表的另一端稱為棧底,棧底是固定不變的。先進後出 filo include include define maxsize 100 typedef ...