資料結構之棧結構

2021-10-02 05:28:07 字數 3125 閱讀 6612

棧結構是一種filo(first in last out)的批量資料儲存結構。其特點是先進後出,後來者居上

棧的基本屬性:棧記憶體、棧頂標記、棧的當前元素個數(萬金油屬性:size)

棧的基本操作:

萬金油的的操作:

根據實現的不同將棧結構分為兩種:

1.鏈式棧

2.陣列

利用有表頭鍊錶的頭插法來完成棧的功能:

設計資料結構:

//鍊錶結構

struct node

;//棧結構

struct stack

;

資料初始化(建立結點,建立棧)

//建立結點

struct node*

createnode

(int data)

//建立棧-->描述結點的最初狀態

struct stack*

createstack()

萬金油函式

//萬金油函式

intsize

(struct stack* pstack)

//棧中元素個數

intempty

(struct stack* pstack)

//判斷棧是否為空

棧的基本方法的實現:入棧、出棧、獲取去棧頂元素。

//入棧操作--->鍊錶的頭插法。(無頭鍊錶,棧頂指標永遠都指向第乙個結點)

void

push

(struct stack* pstack,

int data)

//出棧:鍊錶的刪除(無頭鍊錶的頭刪法)

void

pop(

struct stack* pstack)

struct node* nextnode = pstack-

>stacktop-

>next;

free

(pstack-

>stacktop)

; pstack-

>stacktop = nextnode;

pstack-

>sizestack--;}

//獲取棧頂元素

inttop

(struct stack* pstack)

return pstack-

>stacktop-

>data;

}

完整測試**:

//鏈式棧:鍊錶的頭插法

#include

#include

//鍊錶結構

struct node

;//棧結構

struct stack

;//建立結點

struct node*

createnode

(int data)

//建立棧-->描述結點的最初狀態

struct stack*

createstack()

//萬金油函式

intsize

(struct stack* pstack)

intempty

(struct stack* pstack)

//入棧操作--->鍊錶的頭插法。(無頭鍊錶,棧頂指標永遠都指向第乙個結點)

void

push

(struct stack* pstack,

int data)

//出棧:鍊錶的刪除(無頭鍊錶的頭刪法)

void

pop(

struct stack* pstack)

struct node* nextnode = pstack-

>stacktop-

>next;

free

(pstack-

>stacktop)

; pstack-

>stacktop = nextnode;

pstack-

>sizestack--;}

//獲取棧頂元素

inttop

(struct stack* pstack)

return pstack-

>stacktop-

>data;

}int

main()

printf

("\n");

return0;

}

棧結構的先進後出這一特點使得它適用於回退的過程,在短除法進行進製轉換(最後有乙個逆序列印的過程)時我們就可以運用棧這一結構進行實現。

//接上面鏈式棧

//接上面鏈式棧

//接上面鏈式棧

//用棧結構實現進製轉換:

int num =

20000105

;//將十進位制的num轉換為2進製(除k取餘法)

struct stack* d2b =

createstack()

;//將十進位制的20000105轉換為二進位制數

printf

("%d的二進位制數為:"

, num)

;while

(num)

while(!

empty

(d2b)

)

通常情況下,陣列本身就可以充當棧記憶體,可以直接用陣列來實現棧的功能

並其相對於鏈式棧,陣列棧相對簡便。因而用陣列棧更多

//陣列棧的使用示例:

//進製轉換問題:

#include

#include

intmain()

while

(stacktop !=-1

)//與棧頂標記最開始時進行比較

return0;

}

需要注意的是陣列棧無法進行出棧操作,上面的出棧操作實際上是一種偽刪除的過程

資料結構之棧

4.8.2 四則運算表示式求值 程式如下所示 include include include 定義結點型別 typedef struct node node,pnode 定義棧的抽象資料型別 typedef struct stack stack,pstack 函式宣告 對棧進行初始化的函式 void...

資料結構之棧

資料結構之棧 本文討論棧的陣列實現。棧需要有如下幾個屬性 棧的容量 capacity 棧頂指標 儲存棧元素的陣列 根據這幾個屬性可以定義乙個棧結構體 struct stackrecord 然後定義棧的操作,一般可以包含如下幾個 棧的建立 stack createstack int size 棧的銷毀...

資料結構之棧

決定採用何種方式來儲存資料是非常重要的,這樣便於檢索資料時,資料會自動按照某種規定的順序給出。棧是檢索資料的一種方式,它檢索元素的順序與儲存元素的順序相反。棧 先進後出。要把元素儲存到棧中,就 壓入 元素,要刪除棧中的元素,就 彈出 元素。有時候,可以通過檢查棧頂的元素 而不是實際去刪除它 來獲取元...