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

数据结构小结——顺序栈

2017-08-06 18:53 381 查看
栈是数据结构中的一种存储方式,和栈内存没有什么关系,它可以存在栈内存上,也可以存在堆内存上,此篇介绍的顺序栈栈就是存在栈内存上的。

顺序栈顾名思义,就是存在内存上连续一段地址空间内的栈,和顺序表差不多。

栈有一个要求就是先入后出,后入先出

结构很简单:

#define SIZE 10
typedef int StackData;
typedef struct _stack
{
StackData data[SIZE];    // 栈数组
int  top;                // 栈顶元素下标
}Stack;


这么用呢,第一步要置空栈,也就相当于给它初始化了:

int InitStack (Stack *S)
{
if (S == NULL)
{
errno = ERROR;
return FALSE;
}
S->top = -1;
}


因为是顺序栈,是基于数组来存储数据的,所以它的空间大小是固定的,所以必要要判断栈满、栈空这两种情况:

//判断栈空
int StackEmpty (Stack *S)
{
if (S == NULL)
{
errno = ERROR;
return FALSE;
}

return S->top == -1;
}

//判断栈满
int StackFull (Stack *s)
{
if (s == NULL)
{
errno = ERROR;
return FALSE;
}

return s->top == (SIZE-1);
}


对栈数据的操作一定要符合先入后出的原则:

入栈或者叫压栈其实就是在尾部添加数据:

int Push (Stack *s, StackData x)
{
if (s == NULL)
{
errno = ERROR;
return FALSE;
}

// 判断是否满栈
if (StackFull(s))
{
errno = FULL_STACK;
return FALSE;
}

s->data[++s->top] = x;
return TRUE;
}


而出栈也就是从尾部将数据取出来丢掉:

//这里的*x是用来存储出栈的值
int Pop (Stack *s, StackData *x)
{
if (s == NULL)
{
errno = ERROR;
return FALSE;
}

// 判断是否空栈
if (StackEmpty(s))
{
errno = EMPTY_STACK;
return FALSE;
}

*x = s->data[s->top--];
return TRUE;
}


栈其实就是这么简单,只要满足先入后出这个原则就可以了,需要完整代码请直接下载(免积分)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 顺序栈