您的位置:首页 > 理论基础 > 数据结构算法

数据结构之栈的实现--顺序栈(C语言)

2018-09-16 11:25 253 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40411915/article/details/82721433

学习参考: 严蔚敏: 《数据结构-C语言版》

要点:

栈(Stack)是限制在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶(Top),另一端为栈底(Bottom)。当表中没有元素时称为空栈。限定只能在表的一端进行插入和删除运算的线性表(只能在栈顶操作)

基本操作

  1. 入栈
  2. 出栈
  3. 读栈顶元素值
  4. 建栈
  5. 栈满
  6. 栈空
  7. 清空栈
  8. 销毁栈

代码实现

 栈结构定义:

[code]typedef struct
{
int* base;
int top;
int size;
}SeqStack,* pStack;

建栈

[code]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;
}

栈满

[code]int stackFull(pStack s)
{
if(!s)
return -1;
return s->top>s->size;
}

栈空

[code]int stackEmpty(pStack s)
{
return s->top<=0;
}

入栈

[code]int Push(pStack s,int data)
{
if(!s|| stackFull(s))
return 0;
s->base[s->top] = data;
s->top++;
return 1;
}

出栈

[code]int pop(pStack s,int* data)
{
if(!s || stackEmpty(s))
return 0;
*data = s->base[s->top-1];
s->top--;
return 1;
}

读栈顶元素值

[code]int getTop(pStack s,int* data)
{
if(!s || stackEmpty(s))
return 0;
*data = s->base[s->top-1];
return 1;
}

清空栈

[code]int ClearStack(pStack s)
{
if(!s)
return 0;
s->top = 0;
s->size = 0;
return 1;
}

销毁栈

[code]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;
}

测试代码

[code]#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;
}

写在最后

文章记录本人学习所得, 如有所错误, 欢迎留言指出交流, 大神请键盘下留人 ! ! ! 

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: