软件技术基础上机实验3(数据结构)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三数据结构上机实验
⏹实验目的:
掌握栈的运算。掌握队列中的进队和出队运算。
⏹实验内容:
1.顺序栈运算的实现
编写程序实现顺序栈的运算,包括以下函数:
a)初始化栈;
b)建立栈;
c)打印栈中的栈元素;
d)取栈顶元素;
e)进栈;
f)出栈。
在主函数中输出菜单,调用上述函数
(参考程序附后stack.c)
2.队列中的进队和出队运算
顺序存储一个循环队列,编写下列函数:
a)初始化队列;
b)进队;
c)出队;
d)打印队列中的元素。
在主函数中提供调用上列函数的菜单。
(参考程序附后queue.c)
3.试编写一程序,运用栈结构实现编译系统中中缀表达式到后缀表达式的变换,要求可处理带括号的表达式。 (注:此题选做。参考源码附后express.c)
⏹实验报告:
1.源代码(包括主要结构、主要语句、函数注释说明)
2.运行结果(包括程序如何使用,输入数据和输出结果)
3.实验体会和问题分析
4.报告请以电子文档形式,上传至教师社区/课程列表中的“软件技术基础”,文
件名以学号加姓名命名。
顺序栈运算的实现stack.c (程序需补充完整)
# define MAX 10
typedef struct
{
int stack[MAX];
int top;
} stacktype;
void initstack(stacktype *s)
{
程序需补充完整
}
int pushs(stacktype *s,int x)
{
程序需补充完整
}
int pops(stacktype *s)
{
程序需补充完整
}
int tops(stacktype *s)
{
if (s->top<0)
{
printf("\nThe stack is empty.");
return 0;
}
else
return(s->stack[s->top]);
}
void createstack(stacktype *s)
{
int i,n,x;
printf("\nplease input how many elements do you want to put into the stack n=");
scanf("%d",&n);
if (n>MAX) n=MAX;
for(i=1;i<=n;i++)
{
printf("\nplease input the No. %d element:",i);
scanf("%d",&x);
pushs(s,x);
}
}
int printstack(stacktype s)
{
int i;
if (s.top<0)
{
printf("\nThe stack is empty.");
return 0;
}
else
{
printf("\nContent of the stack is: ");
i=s.top;
while (i>=0)
{
printf("\n %d",s.stack[i]);
i--;
}
return 1;
}
}
void main()
{
int x,i,retvalue;
stacktype s;
i=1;
initstack(&s);
createstack(&s);
printf("\ncreatedstack is: ");
printstack(s);
while(i)
{
printf("\n");
printf("\n\t\t\t*******************************");
printf("\n\t\t\t* 1---Push *");
printf("\n\t\t\t* 2---Pop *");
printf("\n\t\t\t* 3---Get top *");
printf("\n\t\t\t* 0---exit *");
printf("\n\t\t\t*******************************");
printf("\n\t\t\tPlease select: 0-3...");
scanf("%d",&i);
switch(i)
{
case 1:
printf("\ninput element:");
scanf("%d",&x);
retvalue=pushs(&s,x);
if (retvalue==0)
printf("\nThe stack is full.");
else
{
printf("\nAfter Push");
printstack(s);
}
break;
case 2:
retvalue=pops(&s);
if (retvalue==0)
printf("\nThe stack is empty.");
else
{
printf("\nReturn value is: %d",retvalue);
printf("\nAfter Pop");
printstack(s);
}
break;
case 3:
retvalue=tops(&s);
printf("\nReturn value is: %d",retvalue);
printf("\nAfter top");
printstack(s);
break;
}
}
}