栈(Stack)
结构是数据结构中较为基础的一种,其特点是后进先出(last in,first out).
使用数组实现顺序栈也较为简单,在不考虑动态分配空间的前提下,只需要维护一个数组和一个指向栈顶的指针即可
又因为数组为顺序存储,所以可以使用数组下标代替指针来实现对应结构.
简易实现代码如下:
#include <stdio.h>
#define ROOM 1005//最大储存空间
typedef struct stack//栈结构定义
{
int space[ROOM];//栈空间
int top;//栈顶指针
} Stack;
int pop(Stack *s)//pop方法
{
if (s->top >= 0)//通过判断top来判空
{
printf("%d ", s->space[s->top]);//此处使用print来模拟pop
s->top--;//栈顶回退
return 1;//有效pop
}
return 0;//无效pop
}
int push(Stack *s, int e)//push方法
{
if (s->top < ROOM - 1)//通过判断top与ROOM的关系判断栈是否已满
{
s->top++;//栈顶延伸
s->space[s->top] = e;//存入数据
return 1;//有效push
}
return 0;//无效push
}
int main(int argc, char const *argv[])
{
Stack s;
s.top = -1;//对应push的写法,此处初始栈指针为-1
int e;
while (scanf("%d", &e) == 1 && push(&s, e))//通过输入存放数据
;
while (pop(&s))//输出数据
;
return 0;