資料結構之棧

2021-08-03 06:53:38 字數 2168 閱讀 4901

棧(stack)又稱堆疊,是一種特殊的線性結構,棧的特殊之處在於:所有對於棧的操作都是在棧的一端(頂部)進行的,如對棧進行元素新增(入棧)元素刪除(彈棧/出棧),按照「後進先出」的規則進行操作。棧在程式設計中特別重要,程式的除錯和執行都需要棧的支撐。

棧(stack)是限定在表的一端進行插入和刪除操作的線性表。插入元素稱為(入棧),刪除元素稱為出棧。通常將允許出棧的一端稱為棧頂(top),則另一端稱為棧底(bottom)。不含元素的棧稱為空棧。

舉個例子來說明棧的結構和操作:將書放入沒有蓋的盒子中,這樣要將書取出來,只能將最上層的書先取出來,即將最後放入的書先取出來。所以棧又稱為後進先出的線性表,簡稱filo(first in last out)

棧的基本操作如下

(1)初始化乙個棧

(2)判斷是否是空棧

(3)判斷是否是滿棧

(4)進棧

(5)出棧

(6)取棧頂元素

(7)求當前棧元素個數

因為棧是一種特殊的線性結構,所以有兩種儲存結構,即順序儲存機構和鏈式儲存結構。接下來給出順序儲存機構的相關實現**。

#include #include #define size 100

typedef struct

stack;

順序棧利用陣列來實現 陣列的大小定義為
size 100
用top作為棧頂元素的的下標,top的範圍為0到size-1,通常規定top等於0的時候表示棧空,即陣列data[0]不存放資料。

1.初始化乙個棧

void init_stack(stack *s)

}

從鍵盤輸入棧的元素,假定當輸入為-1時作為輸入結束的標誌

2.判斷乙個棧是否為空

通過判斷top是否為0來判斷棧是否為空

int is_empty(stack *s)

3.判斷乙個棧是否已滿

通過判斷top是否為size-1來判斷棧是否已經滿了

int is_full(stack *s)

4.資料進棧操作

void push_stack(stack *s,int i)

}

5.資料出棧操作
void pop_stack(stack *s)

}

6.取棧頂元素操作
int get_top(stack *s)

}

7.棧置空操作
void clean_stack(stack *s)

8.求當前棧中元素的個數

int current_size(stack *s)

typedef struct snode

linkstack;

1.初始化乙個棧

linkstack* init_linkstack()

return top;

}

2.資料進棧操作

linkstack*  push_linkstack(linkstack *top,int x)

3.資料出棧操作

linkstack* pop_linkstack(linkstack *top)

4.輸出棧中所有元素
void print_linkstack(linkstack *top)

}

資料結構之棧結構

棧結構是一種filo first in last out 的批量資料儲存結構。其特點是先進後出,後來者居上 棧的基本屬性 棧記憶體 棧頂標記 棧的當前元素個數 萬金油屬性 size 棧的基本操作 萬金油的的操作 根據實現的不同將棧結構分為兩種 1.鏈式棧 2.陣列 利用有表頭鍊錶的頭插法來完成棧的功...

資料結構之棧

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

資料結構之棧

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