堆疊的初識

2021-07-29 05:22:19 字數 1162 閱讀 9882

堆疊(stack)是一種簡單和常用的資料結構,使用者只能在指定的一端插入元素,並在同一端刪除元素,因而元素的插入和刪除具有後進先出lifo(last-in-first-out)的特性。

基本知識

允許插入和刪除元素的一端稱為棧頂,而另外一端稱為棧底。若棧中無元素,則稱為空棧

常見的基本運算:

#include

#define maxsize 50

#define false 0

#define true 1

typedef

int bool;

typedef

int t;

typedef

struct

stackstack;

//構造乙個空棧,令棧頂指標top=-1.棧的容量是maxstack由使用者通過引數maxsize指定,但是不能超過maxsize

void createstack(stack *s,int maxsize)

//若棧為空,則返回true,否則返回false

bool isempty(stack s)

//若堆疊已滿,則返回true,否則返回false

bool isfull(stack s)

//進棧,若堆疊已滿,則輸出overflow,否則值為x的新元素進棧,成為棧頂元素

void push(stack *s,t x)

//出棧,若堆疊為空,則輸出underflow,否則棧頂元素從棧中刪除

void pop(stack *s)

//返回棧頂元素值,若堆疊為空,則輸出underflow,否則在引數x中返回棧頂元素值

void stacktop(stack s,t *x)

//輸入乙個整數

t* inputelement()

//輸出棧內元素

void printstack(stack s)

for(i=0;i<=s.top;i++)

printf("%5d",s.elements[i]);

printf("\n");

}int main()

還可以求棧的長度,清除乙個棧,遍歷乙個棧等,需要後續補充。

堆,棧,堆疊的區別

乙個程式一般分為3段 text段,data段,bss段 text段 就是放程式 的,編譯時確定,唯讀,data段 存放在編譯階段 而非執行時 就能確定的資料,可讀可寫 就是通常所說的靜態儲存區,賦了初值的全域性變數和靜態變數存放在這個區域,常量也存放在這個區域 bss段 定義而沒有賦初值的全域性變數...

佇列 堆 棧 堆疊的區別?

佇列是先進先出 就像一條路,有乙個入口和乙個出口,先進去的就可以先出去。而棧就像乙個箱子,後放的在上邊,所以後進先出。程序中每個執行緒都有自己的堆疊,這是一段執行緒建立時保留下的位址區域。我們的 棧記憶體 即在此。至於 堆 記憶體,我個人認為在未用new定義時,堆應該就是未 保留 未 提交 的自由空...

堆 棧和堆疊的區別

堆 heap 堆是一種經過排序的樹形資料結構,每個結點都有乙個值。棧 stack 它是一種具有後進先出性質的資料結構,也就是說後存放的先取,先存放的後取。ps 頗有砌牆的磚 後來者居上的趕腳。1,申請方式 heap 程式設計師自己申請,並指明大小。stack 由系統分配。2,申請效率 原為 heap...