一、概念
棧:棧是一個先進后出的線性表,它要求只在表尾進行刪除和插入等操作。
所以棧其實就是一個線性表,不過操作有特殊的要求和限制:
- 元素必須先進后出;
- 操作只能在線性表尾進行
棧的基本操作只有2個
- 入棧(Push)
- 出棧(Pop)
棧的結構示意圖(網上找的)

棧的結構示意圖
二、棧的實現
下面介紹如何使用順序表實現一個簡單的棧
(1)定義棧的結構
typedef struct {
DATA data[SIZE+1]; //棧的數據元素,SIZE表示棧大小,數據從下標1開始保存
int top; //棧頂,top=0時表示棧為空
}SeqStack;
(2)初始化棧
SeqStack *SeqStackinit()
{
SeqStack *p;
if (p=(SeqStack *)malloc(sizeof(SeqStack))) {
p->top = 0;
return p;
}
return NULL;
}
(3)釋放棧
void SeqStackFree(SeqStack *s)
{
if (s)
free(s);
}
(4)判斷棧的狀態(tài)
int SeqStackIsEmpty(SeqStack *s)
{
return (s->top == 0);
}
void SeqStackClear(SeqStack *s)
{
s->top = 0;
}
int SeqStackIsFull(SeqStack *s)
{
return (s->top == SIZE);
}
(5)入棧
int SeqStackPush(SeqStack *s, DATA data)
{
if ((s->top + 1) > SIZE) {
printf("棧溢出\n");
return 0;
}
s->data[++s->top] = data;
return 1;
}
(6)出棧
DATA SeqStackPop(SeqStack *s)
{
if (s->top == 0) {
printf("棧為空\n");
exit(0);
}
return (s->data[s->top--]);
}
(7)獲取棧頂元素
DATA SeqStackPeek(SeqStack *s)
{
if (s->top == 0) {
printf("棧為空\n");
exit(0);
}
return (s->data[s->top]);
}
打完手工,可能有不完善或者bug,只能等以后發(fā)現了再修改了