一,顺序栈的定义
顺序栈是一种线性数据结构,它具有后进先出(LIFO)的特点。在顺序栈中,所有元素存储在一个连续的内存空间中,并且每个元素只能通过栈顶进行插入和删除操作。顺序栈通常使用数组实现,栈顶指针指向最后一个入栈的元素。
可以为羽毛球桶或者乒乓球桶,先放入的羽毛球最后才能拿出来,最后放入的羽毛球最先拿出来,这就是先进后出,后进先出的特点。
二,代码实现
#include<stdio.h>
#include<stdlib.h>
typedef struct sqstack
{
int * base;
int* top;
int stacksize;
}sqstack;
void creatstack(sqstack& S)
{
S.base = (int*)malloc(10 * sizeof(int));//动态开辟十个整型空间
S.stacksize = 10;
S.top = S.base;
printf("创建顺序栈成功!\n");
}
void pushstack(sqstack& S)
{
if (S.top - S.base == S.stacksize)
{
printf("栈满!");
exit(1);
}
printf("请输入入栈的数:");
int e;
scanf("%d", &e);
*S.top = e; //S.top是用来记录数组长度的,如果压入一个数,就要把S.top所在的地址给一个数
S.top++;
printf("%d入栈成功!\n", e);
}
void popstack(sqstack& S)
{
if (S.top == S.base)
{
printf("栈空!");
exit(1);
}
int e;
S.top--;
e = *S.top;
printf("%d出栈成功!\n", e);
}
void gettop(sqstack& S)
{
if (S.top == S.base)
{
printf("栈空!");
exit(1);
}
else
printf("栈顶元素为:%d\n", *(S.top-1));
}
void menu()
{
printf("****************************************************\n");
printf("********* 请输入你的选择 ***********\n");
printf("********* 1 ---- 创建顺序栈 ***********\n");
printf("********* 2 ---- 入栈 ***********\n");
printf("********* 3 ---- 出栈 ***********\n");
printf("********* 4 ---- 取栈顶元素 ***********\n");
printf("****************************************************\n");
}
int main()
{
sqstack S;
menu();
while (1)
{
int choice;
printf("请输入选择");
scanf("%d", &choice);
switch (choice)
{
case 1:
creatstack(S);
break;
case 2:
pushstack(S);
break;
case 3:
popstack(S);
break;
case 4:
gettop(S);
break;
}
}
return 0;
}