链栈
链栈的设计依赖于笔者之前设计的链表,详情请看《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);
}