C資料結構-鏈棧
阿新 • • 發佈:2018-12-21
鏈棧
鏈棧的設計依賴於筆者之前設計的連結串列,詳情請看《C資料結構-線性表之單鏈表 》。
#ifndef LINKEDSTACK_H #define LINKEDSTACK_H #include "LinkedList.h" typedef linked_list linked_stack; /** * 建立連結串列棧 * @return */ linked_stack *linked_stack_create(); /** * 入棧 * @param pstack 棧指標 * @param p 入棧元素的指標 * @return 成功:1,失敗:0 */ int linked_stack_push(linked_stack *pstack, elem_t *p); /** * 出棧 * @param pstack 棧指標 * @return 返回出棧元素的值 */ elem_t linked_stack_pop(linked_stack *pstack); /** * 獲取棧頂元素的值 * @param pstack * @return */ elem_t linked_stack_top(linked_stack *pstack); /** * 判斷棧是否為空 * @param pstack 棧指標 * @return 1為空,否則非空 */ int linked_stack_empty(linked_stack *pstack); /** * 銷燬棧 * @param pstack 棧指標 * @return 成功:1,失敗:0 */ int linked_stack_destroy(linked_stack *pstack); #endif // LINKEDSTACK_H
#include "LinkedStack.h" /** * 建立連結串列棧 * @return */ linked_stack *linked_stack_create() { return linked_list_create(); } /** * 入棧 * @param pstack 棧指標 * @param p 入棧元素的指標 * @return 成功:1,失敗:0 */ int linked_stack_push(linked_stack *pstack, elem_t *p) { return linked_list_insert(pstack,p); } /** * 出棧 * @param pstack 棧指標 * @return 返回出棧元素的值 */ elem_t linked_stack_pop(linked_stack *pstack) { elem_t temp; linked_list_remove(pstack,0,&temp); return temp; } /** * 獲取棧頂元素的值 * @param pstack * @return */ elem_t linked_stack_top(linked_stack *pstack) { elem_t temp; linked_list_get(pstack,0,&temp); return temp; } /** * 判斷棧是否為空 * @param pstack 棧指標 * @return 1為空,否則非空 */ int linked_stack_empty(linked_stack *pstack) { return (pstack->length == 0); } /** * 銷燬棧 * @param pstack 棧指標 * @return 成功:1,失敗:0 */ int linked_stack_destroy(linked_stack *pstack) { return linked_list_destroy(pstack); }