顺序栈
顺序栈的实现依赖于笔者之前实现的顺序表,详情请看《C数据结构-线性表之顺序表》。
#ifndef SEQSTACK
#define SEQSTACK
#include "SeqList.h"
typedef seq_list seq_stack;
/**
* 顺序栈初始化
* @param size 顺序栈的大小
* @return
*/
seq_stack *seq_stack_init(int size);
/**
* 入栈
* @param pstack 栈指针
* @param p 入栈元素的指针
* @return 成功:1,失败:0
*/
int seq_stack_push(seq_stack *pstack, elem_t *p);
/**
* 出栈
* @param pstack 栈指针
* @return 返回出栈元素的值
*/
elem_t seq_stack_pop(seq_stack *pstack);
/**
* 获取栈顶元素的值
* @param pstack
* @return
*/
elem_t seq_stack_top(seq_stack *pstack);
/**
* 判断栈是否为空
* @param pstack 栈指针
* @return 1为空,否则非空
*/
int seq_stack_empty(seq_stack *pstack);
/**
* 判断栈是否满
* @param pstack 栈指针
* @return 1已满,否则不满
*/
int seq_stack_full(seq_stack *pstack);
/**
* 销毁栈
* @param pstack 栈指针
* @return 成功:1,失败:0
*/
int seq_stack_destroy(seq_stack *pstack);
#endif // SEQSTACK
#include "SeqStack.h"
/**
* 顺序栈初始化
* @param size 顺序栈的大小
* @return
*/
seq_stack *seq_stack_init(int size)
{
return seq_list_init(size);
}
/**
* 入栈
* @param pstack 栈指针
* @param p 入栈元素的指针
* @return 成功:1,失败:0
*/
int seq_stack_push(seq_stack *pstack, elem_t *p)
{
return seq_list_insert(pstack,0,p);
}
/**
* 出栈
* @param pstack 栈指针
* @return 返回出栈元素的值
*/
elem_t seq_stack_pop(seq_stack *pstack)
{
elem_t temp;
seq_list_delete(pstack,0,&temp);
return temp;
}
/**
* 获取栈顶元素的值
* @param pstack
* @return
*/
elem_t seq_stack_top(seq_stack *pstack)
{
elem_t temp;
seq_list_get(pstack,0,&temp);
return temp;
}
/**
* 判断栈是否为空
* @param pstack 栈指针
* @return 1为空,否则非空
*/
int seq_stack_empty(seq_stack *pstack)
{
return seq_list_is_empty(pstack);
}
/**
* 判断栈是否满
* @param pstack 栈指针
* @return 1已满,否则不满
*/
int seq_stack_full(seq_stack *pstack)
{
return ( seq_list_length(pstack) == seq_list_max_size(pstack) );
}
/**
* 销毁栈
* @param pstack 栈指针
* @return 成功:1,失败:0
*/
int seq_stack_destroy(seq_stack *pstack)
{
return seq_list_destroy(pstack);
}