1、什么是栈
栈(stack)又名堆栈,它是一种运算受限的线性表。
其限制是仅允许在表的一端进行插入和删除运算,这一端被称为栈顶,把另一端称为栈底。
向一个栈插入新元素称作压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
从一个栈删除元素称作出栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈的特点就是:先进后出(FILO),或是后进先出(LIFO)。
栈的结构可用下图描述:
2、代码实现栈
主要四个操作分别是:判空、判满、压栈、出栈。
代码实现如下:
/*基于结构体----栈的实现
思路:
top始终指向一个待插入的位置
push操作:1.写入数据 2.top++ 3.前提:栈非满
pop操作: 1.top-- 2.弹出数据 3.前提:栈非空*/
#include <stdio.h>
typedef struct _stack
{
char mem[1024];
int top;
}stack;
int isFull(stack *ps) //判满
{
return ps->top == 1024;
}
int isEmpty(stack *ps) //判空
{
return ps->top == 0;
}
void push(stack *ps,char ch) //压栈
{
ps->mem[ps->top] = ch;
(ps->top)++;
}
char pop(stack *ps) //出栈
{
--(ps->top);
return ps->mem[ps->top];
}
int main()
{
stack s = { { 0 }, 0 }; //栈初始化
for (char ch = 'a'; ch <= 'z';ch++)
{
if (!isFull(&s))
{
push(&s, ch);
}
}
while (!isEmpty(&s))
{
putchar(pop(&s));
puts(""); //换行
}
return 0;
}