棧(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在空間之外進行操作...