鏈棧
鏈棧的設計依賴於筆者之前設計的鏈表,詳情請看《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);
}