C數據結構-鏈棧

鏈棧

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





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章