引言
多多点赞,火速更新中~~
相信大家学完基础栈之后,想小试牛刀,本章讲解栈的基础操作,先进后出FILO,话不多说,直接上实践。
也可以作为课程设计使用哦
学习目的
- 掌握顺序栈的存储结构
- 掌握顺序栈的基本操作
- 掌握顺序栈的基本特性
环境与设备
操作系统:Windows 10
编译器:DevC++
存储结构
typedef int DataType;
typedef struct
{
DataType data[MAXSIZE];
int top;
}SqStack;
算法描述
希望宝子们弄清楚下列问题,再看代码~
相信你能有所收获。
- 初始化栈算法描述:
- 入栈算法描述:
- 出栈算法描述:
- 获取栈顶元素算法描述:
- 判空算法描述:
- 数制转换算法描述:
函数原型
1. void InitStack(SqStack *S)//初始化栈
2. int push(SqStack *S,DataType x)//入栈
3. int pop(SqStack *S)//出栈
4. int get(SqStack *S)//获取栈顶元素
5. int Empty(SqStack *S)//判空
6. void DisStatck(SqStack *S) //显示栈中元素
7. void Converse(int n,DataType x)//数制转换
核心代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 10
typedef int DataType;
typedef struct
{
DataType data[MAXSIZE];
int top;
}SqStack;
SqStack S;
void InitStack(SqStack *S);//初始化栈
int push(SqStack *S,DataType x);//入栈
int pop(SqStack *S);//出栈
int get(SqStack *S);//获取栈顶元素
int Empty(SqStack *S);//判空
void DisStatck(SqStack *S); //显示栈中元素
void Converse(int n,DataType x,SqStack *S);//数制转换
void menu();
void menu1();
int main()
{
menu();
}
//初始化栈
void InitStack(SqStack *S)
{
S->top=-1;
}
//入栈
int push(SqStack *S,int x)
{
if(S->top+1>MAXSIZE)
{
printf("当前栈已满\n");
return 0;
}
else
{
S->top++;
S->data[S->top]=x;
printf("入栈成功\n");
}
}
//出栈
int pop(SqStack *S)
{
if(S->top<0)
{
printf("\t\t当前栈内元素为空,出栈失败!\n\n");
}
else
{
printf("当前出栈元素为:\t");
printf("%d\n",S->data[S->top]);
S->top--;
}
}
//获取栈顶元素
int get(SqStack *S)
{
if(S->top<0)
{
printf("\t\t当前栈内元素为空,出栈失败!\n\n");
}
else
{
printf("栈顶元素为:\t%d\n",S->data[S->top]);
}
}
//判空
int Empty(SqStack *S)
{
if(S->top==-1)
{
printf("当前栈为空\n");
}
else
{
printf("当前栈不为空\n");
}
}
//显示栈中元素
void DisStatck(SqStack *S)
{
if(S->top==-1)
{
printf("当前栈为空\n");
}
else
{
printf("当前栈为\n");
for(int i=S->top;i>=0;i--)
{
printf("%d\t",S->data[i]);
}
}
}
//数制转换
void Converse(int n,DataType x,SqStack *S)
{
InitStack(S);
int task=x;
while(task>0)
{
S->top++;
S->data[S->top]=task%n;
task/=n;
}
}
void menu()
{
system("mode con cols=80 lines=45");
system("color 30");
printf("\t-------------------------------------------------------------\n");
printf("\t* 顺序栈 *\n");
printf("\t-------------------------------------------------------------\n");
printf("\t*\t\t 1.初始化栈 *\n");
printf("\t*\t\t 2.入栈 *\n");
printf("\t*\t\t 3.出栈 *\n");
printf("\t*\t\t 4.获取栈顶元素 *\n");
printf("\t*\t\t 5.判空 *\n");
printf("\t*\t\t 6.显示栈中元素 *\n");
printf("\t*\t\t 7.数制转换 *\n");
printf("\t-------------------------------------------------------------\n");
printf("\t\t请选择功能\n");
int a;
scanf("%d",&a);
while(a)
{
switch(a)
{
case 1:InitStack(&S);printf("初始化成功\n");break;
case 2:
{
int x=0;
printf("请输入入栈元素\n");
scanf("%d",&x);
push(&S,x);
break;
}
case 3:pop(&S);break;
case 4:get(&S);break;
case 5:Empty(&S);break;
case 6:DisStatck(&S);break;
case 7:
{
InitStack(&S);
int x,n;
printf("请输入需要转换的进制和值\n");
scanf("%d %d",&n,&x);
Converse(n,x,&S);
break;
}
case 12:menu1();break;
default:printf("\t\t还在紧张创作中!!!敬请期待!!!\n");
}
printf("\t\t请选择功能\n");
printf("\t\t温馨提示输入12可查看菜单\n");
scanf("%d",&a);
system("cls");
}
}
void menu1()
{
system("mode con cols=80 lines=45");
system("color 30");
printf("\t-------------------------------------------------------------\n");
printf("\t* 顺序栈 *\n");
printf("\t-------------------------------------------------------------\n");
printf("\t*\t\t 1.初始化栈 *\n");
printf("\t*\t\t 2.入栈 *\n");
printf("\t*\t\t 3.出栈 *\n");
printf("\t*\t\t 4.获取栈顶元素 *\n");
printf("\t*\t\t 5.判空 *\n");
printf("\t*\t\t 6.显示栈中元素 *\n");
printf("\t*\t\t 7.数制转换 *\n");
printf("\t-------------------------------------------------------------\n");
}
调试界面
总结
通过本次实验,掌握栈的一些基本操作。懂得入栈与出栈的特点,知道四则运算与含括号运算在栈中优先级的运用。
在实验中有很多东西,收益匪浅。我觉得,做实验必须掌握实验的基本原理,因此,牢固掌握书本上的基本知识很重要。
其次要有耐心,在程序运行之前可能会出现很多的错误,这就需要我们逐步的去调试,找出一个个错误,并改正,这样程序才能运行。不懂的问题多讨论。
感谢一键三连,谢谢大家~~