棧(stack)是限定於在表尾進行插入和刪除操作的線性表
可以理解為後進先出,先進後出的資料結構
1.push
將資料壓入棧中,壓出的資料成為新的棧頂
2.pop
獲取棧頂資料,並釋放,原棧頂後乙個元素成為新棧頂
用一段記憶體作為棧的儲存空間,top指向棧頂元素的下標
兩個型別的棧共享一段記憶體,適用於此消彼長型的資料情況。top1指向棧1的棧頂,top2指向棧2的棧頂,當top1與top2碰頭則棧空間不足。
c實現棧結構為
typedef struct item//普通棧
stack;
max_size為乙個巨集定義
push操作
bool push(stack *l,int *arry,int lenth)
return 1;
}
該操作允許向棧中壓入一組資料,會進行對棧空間進行計算,如果棧空間不夠(max_size-l->top-1)則返回0,壓入成功返回1
pop操作
bool pop(stack *l, int *e)
彈出操作會先判斷棧中是否有資料即棧頂知否指向-1,如果是則表示棧為空返回0,否則返回棧頂資料。
因為插入與彈出操作均未涉及到迴圈所以其時間複雜度為o(1)
棧結構:
typedef struct date//共享空間棧
sqlstack;
top1指向陣列的底部 top2指向資料的頂部 max_size依然是對陣列長度的巨集定義
push操作
bool push(sqlstack *l,int *arry,int lenth,int stacknum)//適用於兩棧共享
} else if (stacknum == 2) }
else return 0;
return 1;
}
該操作依然允許壓入一組資料,並且需要指出壓入棧1或者壓入棧2,當top1與top2碰面則表示該棧空間已不足返回0,否則完成操作後返回1
pop操作
bool pop(sqlstack *l,int *date,int stacknum)
else if (stacknum == 2)
else return 0;
return 1;
}
彈出棧頂元素的資料,這裡判斷空棧的方式是top1=-1並且top2=max_size
資料結構:
節點:
typedef struct obj
stacknode,*linkstackptr;
棧結構:
typedef struct element
linkstack;//鏈棧
push操作:
bool push(linkstack *l,int date)//新加入的元素會在頂部
該操作會先建立乙個鏈節點s為其分配儲存空間 s的向後指標next指向棧頂之後棧頂指標指向s,此時操作結束top指向s,s指向棧原棧頂元素
pop操作:
bool pop(linkstack *l,stacknode *e)
該操作依然會先對鏈棧進行判斷是否是空鏈棧,判斷方式可以是判斷count的值,也可以判斷top指標是否為空
copy乙個節點元素並將其複製給e所在位址的元素返回。
資料結構之棧結構
棧結構是一種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 棧的銷毀...