C資料結構-順序棧
阿新 • • 發佈:2018-12-21
順序棧
順序棧的實現依賴於筆者之前實現的順序表,詳情請看《C資料結構-線性表之順序表》。
#ifndef SEQSTACK #define SEQSTACK #include "SeqList.h" typedef seq_list seq_stack; /** * 順序棧初始化 * @param size 順序棧的大小 * @return */ seq_stack *seq_stack_init(int size); /** * 入棧 * @param pstack 棧指標 * @param p 入棧元素的指標 * @return 成功:1,失敗:0 */ int seq_stack_push(seq_stack *pstack, elem_t *p); /** * 出棧 * @param pstack 棧指標 * @return 返回出棧元素的值 */ elem_t seq_stack_pop(seq_stack *pstack); /** * 獲取棧頂元素的值 * @param pstack * @return */ elem_t seq_stack_top(seq_stack *pstack); /** * 判斷棧是否為空 * @param pstack 棧指標 * @return 1為空,否則非空 */ int seq_stack_empty(seq_stack *pstack); /** * 判斷棧是否滿 * @param pstack 棧指標 * @return 1已滿,否則不滿 */ int seq_stack_full(seq_stack *pstack); /** * 銷燬棧 * @param pstack 棧指標 * @return 成功:1,失敗:0 */ int seq_stack_destroy(seq_stack *pstack); #endif // SEQSTACK
#include "SeqStack.h" /** * 順序棧初始化 * @param size 順序棧的大小 * @return */ seq_stack *seq_stack_init(int size) { return seq_list_init(size); } /** * 入棧 * @param pstack 棧指標 * @param p 入棧元素的指標 * @return 成功:1,失敗:0 */ int seq_stack_push(seq_stack *pstack, elem_t *p) { return seq_list_insert(pstack,0,p); } /** * 出棧 * @param pstack 棧指標 * @return 返回出棧元素的值 */ elem_t seq_stack_pop(seq_stack *pstack) { elem_t temp; seq_list_delete(pstack,0,&temp); return temp; } /** * 獲取棧頂元素的值 * @param pstack * @return */ elem_t seq_stack_top(seq_stack *pstack) { elem_t temp; seq_list_get(pstack,0,&temp); return temp; } /** * 判斷棧是否為空 * @param pstack 棧指標 * @return 1為空,否則非空 */ int seq_stack_empty(seq_stack *pstack) { return seq_list_is_empty(pstack); } /** * 判斷棧是否滿 * @param pstack 棧指標 * @return 1已滿,否則不滿 */ int seq_stack_full(seq_stack *pstack) { return ( seq_list_length(pstack) == seq_list_max_size(pstack) ); } /** * 銷燬棧 * @param pstack 棧指標 * @return 成功:1,失敗:0 */ int seq_stack_destroy(seq_stack *pstack) { return seq_list_destroy(pstack); }