C语言实现栈(Stack)
运行环境:Dev-C++ 5.11
编程语言:C
一、栈是什么?
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。【1】摘自百度
对栈的特点概括为:先进后出或后进先出
二、有关数据及操作:数据类型,初始化,压栈、出栈(弹栈)
- 因为栈只在一段进行操作,因此不会和队列一样容易引起结构变化。
- 在本程序中使用数组来存储数据,易于学习理解。<如果感兴趣,可以使用链表存储。>
- 控制栈的标识为栈顶top(int型,本程序没有使用栈底bottom标识),在这里一方面标识栈顶,另一方面表示数组的下标。
- 本程序创建栈变量后,必须初始化,否则会报错。<这里仅作为学习分享,可以自行修改>
- 本程序栈中所存储的类型为char,可修改自定义名ch指代的数据类型,来修改栈中所存储的类型。
- 默认存储数据个数为100,实际只能存储99(具体看第7点和程序代码),可以手动调,在自定义宏里
- 本程序关于栈的操作函数,对栈类型参数的调用都是取地址(栈类型指针),注意函数使用参数类型。
栈空:top指向数组下标为0,表示数组为空,故栈也为空。
栈满:数组大小为MaxStack,故数组下标最大为MaxStack-1,当top为MaxStack-1时,认为栈满,防止数组下标越界。
三、程序代码
代码如下(示例):
#include <stdio.h>
#include <stdlib.h>
#define MaxStack 100
typedef char ch;
typedef struct node
{
int top;
ch entry[MaxStack];
}Stack;
void CreateStack(Stack *s) //初始化栈
{
s->top=0;
}
int StackEmpty(Stack *s) //判栈空
{
if(s->top<=0)
return 1;
else
return 0;
}
int StackFull(Stack *s) //判栈满
{
if(s->top >= MaxStack-1)
return 1;
else
return 0;
}
void Push(ch item,Stack *s) //将ch类型的数据压入s栈中
{
if(StackFull(s)) //若栈未满
{
printf("Stack is Full!!!");
exit(0);
}
else
s->entry[s->top++]=item; //这种情况top为数组栈顶第一个为空的位置,Pop函数类似
}
void Pop(ch *item,Stack *s) //将s栈顶的数据弹出,并赋值给item
{
if(StackEmpty(s)) //若栈不空
{
printf("Stack is Empty!!!");
exit(0);
}
else
*item=s->entry[--s->top];
}
ch GetStackTop(Stack *s) //获取s栈顶的数据,并返回
{
if(StackEmpty(s)) //若栈不空
{
printf("Stack is Empty!!!");
exit(0);
}
else
return s->entry[s->top-1];
}
int main()
{
return 0;
}
总结
本程序中只含有关于栈数据结构的部分介绍,更加详细的使用和说明可以通过自己网上查阅资料或是查看其他博主的文章来获取。如果你已经掌握了有关栈的学习,你可以利用栈实现简单的程序以来解决问题,如对序列的逆序,结合队列判断回文序列等等。希望你在浏览本文章后有所收获!!