棧是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。一句話描述棧的特性就是先進後出實現乙個棧我們一般有兩種方法:
顧名思義,就是使用陣列來實現棧的特性。陣列實現簡單,我們只需要預先定義好陣列的大小、在陣列的末尾進行元素的入棧操作或者出棧操作即可。時間複雜度為 o(1)。但是我們棧的大小有限,動態調整棧大小的代價較高,且要求有連續的位址空間。
我們可以使用鍊錶來實現。我們在進行出棧操作和入棧操作的時間複雜度都是 o(1)。同時可以動態的管理棧的大小。
元素節點定義(這是展示的是鍊錶實現的方式):
#include #include // 棧節點元素
typedef struct node
node;
// 頭節點元素
node *head = null;
// 記錄棧元素的數量
int size = 0;
棧的初始化操作
void init()
入棧操作
void push(int val)
else
size++;
}
出棧操作
int pop()
node *old = head;
head = head->prev;
if (head != null)
old->prev = null;
int val = old->val;
size--;
free(old);
return val;
}
獲取棧容量
int stacksize()
啟動函式
int main()/*2
10*/
棧在計算機中十分常見。比如我們寫**的遞迴就會使用到棧。瀏覽器頁面的前進後退都會使用到棧。可見棧的的重要性還是比較高的,需要我們好好掌握。後續有時間會結合棧和演算法寫一篇文章,歡迎閱讀。資料結構中相關的**我已上傳到 gitlab:
以上就是本期的全部內容。在這裡給大家拜個早年,祝大家新的一年牛氣沖天!
資料結構之棧結構
棧結構是一種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 棧的銷毀...