数据结构小结——顺序栈

xiaoxiao2021-02-28  103

栈是数据结构中的一种存储方式,和栈内存没有什么关系,它可以存在栈内存上,也可以存在堆内存上,此篇介绍的顺序栈栈就是存在栈内存上的。

顺序栈顾名思义,就是存在内存上连续一段地址空间内的栈,和顺序表差不多。 栈有一个要求就是先入后出,后入先出。

结构很简单:

#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; }

栈其实就是这么简单,只要满足先入后出这个原则就可以了,需要完整代码请直接下载(免积分)

转载请注明原文地址: https://www.6miu.com/read-58145.html

最新回复(0)