学习参考: 严蔚敏: 《数据结构-C语言版》
要点:
栈(Stack)是限制在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶(Top),另一端为栈底(Bottom)。当表中没有元素时称为空栈。限定只能在表的一端进行插入和删除运算的线性表(只能在栈顶操作)
基本操作
- 入栈
- 出栈
- 读栈顶元素值
- 建栈
- 栈满
- 栈空
- 清空栈
- 销毁栈
代码实现
栈结构定义:
typedef struct
{
int* base;
int top;
int size;
}SeqStack,* pStack;
建栈
int initStack(pStack s, int size)
{
if(!s)
return 0;
if(size <1)
size = 10;
s->base = (int*)malloc(sizeof(int)*size);
if(!s->base)
return 0;
s->top = 0;
s->size = size;
return 1;
}
栈满
int stackFull(pStack s)
{
if(!s)
return -1;
return s->top>s->size;
}
栈空
int stackEmpty(pStack s)
{
return s->top<=0;
}
入栈
int Push(pStack s,int data)
{
if(!s|| stackFull(s))
return 0;
s->base[s->top] = data;
s->top++;
return 1;
}
出栈
int pop(pStack s,int* data)
{
if(!s || stackEmpty(s))
return 0;
*data = s->base[s->top-1];
s->top--;
return 1;
}
读栈顶元素值
int getTop(pStack s,int* data)
{
if(!s || stackEmpty(s))
return 0;
*data = s->base[s->top-1];
return 1;
}
清空栈
int ClearStack(pStack s)
{
if(!s)
return 0;
s->top = 0;
s->size = 0;
return 1;
}
销毁栈
int destroyStack(pStack s)
{
int i = 0;
if(!s)
return 0;
for(i=0; i<s->top; ++i)
{
free(s->base);
s->base++;
}
s->top = -1;
s->size = -1;
return 1;
}
测试代码
#include <stdio.h>
#include "SeqStack.h"
int main()
{
SeqStack stack;
int i =0, val = -1, tag=-1;
initStack(&stack, 10);
for(i=0; i<15; ++i)
Push(&stack, i);
pop(&stack, &val);
getTop(&stack, &tag);
printf("%d ...\n", tag);
destroyStack(&stack);
return 0;
}
写在最后
文章记录本人学习所得, 如有所错误, 欢迎留言指出交流, 大神请键盘下留人 ! ! !