棧的概念
棧:一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行資料插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的資料元素遵守後進先出lifo(last in first out)的原則。
壓棧:棧的插入操作叫做進棧/壓棧/入棧,入資料在棧頂。
出棧:棧的刪除操作叫做出棧。出資料也在棧頂。
舉幾個例子更好的理解棧:
1.羽毛球桶,把羽毛球乙個乙個放進去,先取出來的一定是最後放進去的。
2.吃進去,吐出來(這個例子可能不太恰當,但是很直觀)
棧的結構
棧的實現
棧的實現一般可以使用陣列或者鍊錶實現,相對而言陣列的結構實現更優一些。因為陣列在尾上插入資料的代價比較小
棧的結構包括定長的靜態棧和支援動態增長的棧。一般使用後者較多。以下是動態增長棧的實現:
stack.h
stack.c#pragma once
typedef
int sdatatype;
typedef
struct stack
stack;
void
stackinit
(stack* ps)
;//入棧:尾插
void
stackpush
(stack* ps, sdatatype data)
;//出棧:尾刪
void
stackpop
(stack* ps)
;//獲取棧頂元素
sdatatype stacktop
(stack* ps)
;//獲取棧中有效元素個數
intstacksize
(stack* ps)
;//檢測是否為空
intstackempty
(stack* ps)
;//銷毀
void
stackdestroy
(stack* ps)
;
#include
"stack.h"
#include
#include
#include
#include
void
stackinit
(stack* ps)
ps->capacity =10;
ps->size =0;
}void
checkcapacity
(stack* ps)
//2.拷貝元素
memcpy
(temp, ps->array,
sizeof
(sdatatype)
*ps->size)
;//3.釋放舊空間
free
(ps->array)
; ps->array = temp;
ps->capacity *=2
;}}//入棧:尾插
void
stackpush
(stack* ps, sdatatype data)
//出棧:尾刪
void
stackpop
(stack* ps)
//獲取棧頂元素
sdatatype stacktop
(stack* ps)
//獲取棧中有效元素個數
intstacksize
(stack* ps)
//檢測是否為空
intstackempty
(stack* ps)
//銷毀
void
stackdestroy
(stack* ps)
資料結構 棧講解
棧的基本原理 知識講解 棧也是一種操作 或者說運算 受到限制的特殊線性表。其插入進棧和刪除操作都限制在表的一端進行,這一端被稱為 棧頂 top 相對a的另一端稱為 棧 bottom 插入操作一般稱之為 進棧 push 或者 壓棧 刪除操作稱之為 出棧 pop 棧的特點是 先進後出 fifo,firs...
python資料結構 棧講解
應用實戰 棧有時也稱作下堆疊,是乙個有序集合,以列表的形式,但是他的新增和移除操作總是發生在同一端,被稱為頂端,也叫做棧頂,另一端被稱為低端,也叫棧底。可以理解為在桌子上疊放書本,我們放上去之後如果拿的話也是從上往下拿,放的話則是從下往上,我們往往取的都是放的時間最晚的,就是這個原理。棧的操作型別有...
資料結構 棧的實現(順序棧和鏈棧)
棧介面,描述棧的抽象資料型別,泛型引數t表示資料元素的資料型別 public inte ce sstack 棧有兩種基本的實現 順序棧,實現棧介面 public class seqstack implements sstack 預設構造,構造容量為64的空棧 public seqstack 判斷棧是...