顺序栈(实验报告)

  • 格式:doc
  • 大小:68.00 KB
  • 文档页数:5

重庆电子工程职业学院
实 验 报 告

课程
《数据结构和算法》
班级 软件1017 学号 2010180210 姓名 敬焱彬 成绩

实验名称:
顺序栈

实验目的:
编一个顺序栈实现入栈、出栈的功能。

实验步骤:
1. 定义机构体
2. 定义栈的初始化、入栈、出栈、显示栈中元素,的相关函数。
3. 在mian()函数中调用这些函数,达到相应的功能。
实验数据记录:(源代码及执行过程)
#include
#define M 20
typedef struct
{
int a[M];
int top;
}Stack;
Stack *p;
void stackloading(Stack *p)//栈的初始化
{
p->top=-1;
}
int stackjudge(Stack p)//判断栈是否为空
{
if(p.top<=-1)
return 0;
else
return 1;
}
int stackappend(Stack *p,int x)//入栈
{
if(p->top>=M-1)
{
printf("栈满,已经无法入栈!\n重新");
return 0;
}
else
{
p->top++;
p->a[p->top]=x;
return 1;
}
}
int stackdel(Stack *p,int *d)//出栈
{
if(p->top<=-1)
{
printf("栈已空,无元素出栈!\n");
return 0;
}
else
{
*d=p->a[p->top];
p->top--;
return 1;
}
}
int stacktop(Stack *p,int *d)
{
if(p->top<=-1)
{
printf("栈已空\n");
return 0;
}
else
{
*d=p->a[p->top];
return 1;
}
}
void stackshow(Stack p)//显示栈元素
{
printf("显示栈元素:\n");
int i;
if(p.top!=-1)
{

for(i=0;i<=p.top;i++)
printf("%d\t",p.a[i]);
}
else
{
printf("栈已空!!!, 无元素显示!\n");
}
printf("\n");
}
void main()
{
Stack p;
int i,y,z,n,chose;
stackloading(&p);//建立栈并初始化
for(i=1;i<=40;i++)
printf("─");
printf("顺序栈操作菜单:\t");
printf("①入栈\t②出栈\t③退出\t(提示:输入数字)\n");
for(i=1;i<=40;i++)
printf("─");
do
{
printf("选择:");
scanf("%d",&chose);
switch(chose)
{
case 1:
printf("请输入要入栈的元素个数:");
scanf("%d",&n);
printf("输入%d个元素:\n",n);
for(i=0;i<=n-1;i++)
{
scanf("%d",&y);
stackappend(&p,y);
}
stackshow(p);//显示上面输入的元素
if(stackjudge(p)==0)
{
printf("栈中无数据,请重新输入!\n");
continue;
}
break;
case 2:
if(p.top<=-1)
{
printf("栈空,不能出栈,请先入栈!\n重新");
continue;
}
printf("请输入要出栈的元素个数:");
scanf("%d",&n);
if(n-1>p.top)
{
printf("出栈个数大于栈中已有的元素个数!\n重新");
continue;
}
printf("出栈%d个元素:\n",n);
for(i=1;i<=n;i++)
{
stackdel(&p,&z);
printf("%d\t",z);
}
printf("\n");
stackshow(p);//显示栈元素
break;
}
}
while(chose!=3);
}
程序运行截图
1.
2
实验结论及思考题:
Ok

2010年 4 月 24日
教师评语:

年 月 日