資料結構 棧ADT

2021-09-08 17:49:44 字數 2525 閱讀 5404

棧(stack)是限定僅在表尾插入和刪除操作的線性表

允許插入和刪除的一端稱為棧頂(top),另一端稱為棧底(bottom)

我們可以模擬手槍彈夾,瀏覽器的後退和前進等等都是棧

棧的插入操作,稱為進棧,也稱壓棧、入棧(push)

棧的刪除操作,稱為出棧,也稱為彈棧(pop)

棧本身就是乙個線性表,線性表的順序儲存和鏈式儲存,對於棧來說也同樣適用

堆疊的順序表示(利用陣列)

typedef struct

stack;

/****

*堆疊的順序表示

****/

//建立

void creat(stack * s,int * msize)

//銷毀

void destroy(stack *s)

//判斷是否為空棧

bool isempty(stack *s)

//判斷棧是否已滿

bool isfull(stack *s)

//獲取棧頂元素

bool top(stack *s , elemtype *x)

//在棧頂插入元素

bool push(stack *s,elemtype x)

//刪除棧頂的元素

bool pop(stack *s)

//清除棧中的元素,但不釋放記憶體

void clear(stack *s)

堆疊的鏈結表示(利用單鏈表)

入棧示意圖 

出棧示意圖 

#include #include typedef struct stacknode stacknode;

typedef struct linkstack linkstack;

//初始化

int init(linkstack * linkstack)

//入棧

int push(linkstack * linkstack ,int data)

//出棧

int pop(linkstack * linkstack,int * data)

*data = linkstack->top->element;

stacknode * node = linkstack->top;

//棧頂指標下移一位

linkstack->top = linkstack->top->next;

free(node);

linkstack->length--;

return 1;

}//棧元素清空

void clear(linkstack * linkstack)

}//銷毀

void destroy(linkstack * linkstack)

最後利用棧我們可以完成類似於悔棋的乙個小的demo

/*此模型利用順序棧實現簡單的五子棋悔棋模型

在cpp中只需要將data_t資料型別改為類(結構體)儲存位置

可利用模板實現

同樣棧也可以利用鍊錶實現

*/#include #include #define maxsize 20

#define ok 1

#define error 0

typedef int data_t;

typedef struct

sqstack;

int pushstack(sqstack *s,data_t e)//壓棧

s->top++;

s->data[s->top]=e;

return ok;

}int popstack(sqstack *s,data_t *e)//彈棧

*e=s->data[s->top];

s->top--;

return ok;

}sqstack* createemptystack()//建立棧

stack->top=-1;

return stack;

}int emptystack(sqstack *s)//判斷棧是否是空棧

int fullstack(sqstack *s)//判斷棧是否是滿棧

int clearstack(sqstack *s)//清空棧內元素

int main()

資料結構 順序棧ADT

抽象資料型別 abstract data type,adt 是電腦科學中具有類似行為的特定類別的資料結構的數學模型 或者具有類似語義的一種或多種程式語言的資料型別。抽象資料型別是間接定義的,通過其上的可執行的操作以及這些操作的效果的數學約束 與可能的代價 維基百科 ifndef stack h in...

資料結構 鏈棧ADT

抽象資料型別 abstract data type,adt 是電腦科學中具有類似行為的特定類別的資料結構的數學模型 或者具有類似語義的一種或多種程式語言的資料型別。抽象資料型別是間接定義的,通過其上的可執行的操作以及這些操作的效果的數學約束 與可能的代價 維基百科 ifndef stack h in...

資料結構 回顧棧ADT和隊ADT

1.簡單的說,棧就是只在乙個位置上進行插入和刪除操作的表,而這個特殊的位置就是表的末端,但這卻不被成為棧的末端,而是頂 top 2.棧的基本操作時進棧和出棧,英文名分別是push和pop,分別相當於插入和刪除。切記對空棧進行pop和top操作在棧adt被認為是錯誤的,而如果push在空間之外進行操作...