1. 程式人生 > >C資料結構-鏈棧

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);
}