国开作业《数据结构本》提交实验报告参考含答案398.docx
- 文档编号:5736745
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:9
- 大小:57.23KB
国开作业《数据结构本》提交实验报告参考含答案398.docx
《国开作业《数据结构本》提交实验报告参考含答案398.docx》由会员分享,可在线阅读,更多相关《国开作业《数据结构本》提交实验报告参考含答案398.docx(9页珍藏版)》请在冰豆网上搜索。
国开作业《数据结构本》提交实验报告参考含答案398
数据结构课程实验报告
实
验
概
述
实验目的:
编写一个算法,输出指定栈中的栈底元素,并使得原栈中的元素倒置。
实验要求:
(1)正确理解栈的先进后出的操作特点,建立初始栈,通过相关操作显示栈底元素。
(2)程序中要体现出建栈过程和取出栈底元素后恢复栈的入栈过程,按堆栈的操作规则打印结果栈中的元素。
实验基本原理:
实
验
内
容
实验设计思路、步骤和方法等:
设计思路
(1)采用顺序栈,即用数组存储栈元素。
(2)设定一个临时队列,用来存放从初始栈中出栈的元素。
(3)取出栈底元素后,将队列中的元素逐一出队并压入初始栈中。
实验设计
程序代码如下:
/*实验栈和队列的基本操作*/
#include
#include
#defineMaxSize100
typedefintElemType;
typedefstruct
{
ElemTypedata[MaxSize];
inttop; /*栈顶指针*/
}SeqStack; /*定义顺序栈*/
typedefstruct
{
ElemTypedata[MaxSize];
intfront,rear; /*队头和队尾指针*/
}SeqQueue; /*定义顺序队列*/
voidInitStack(SeqStack*s); /*初始化栈*/
intStackEmpty(SeqStack*s); /*判栈空*/
intStackFull(SeqStack*s); /*判栈满*/
voidPush(SeqStack*s,ElemTypex); /*进栈*/
ElemTypePop(SeqStack*s); /*出栈*/
ElemTypeGetTop(SeqStack*s); /*取栈顶元素*/
voidDispStack(SeqStack*s); /*依次输出从栈顶到栈底的元素*/
voidDispBottom(SeqStack*s); /*输出栈底元素*/
voidInitQueue(SeqQueue*sq); /*初始化队列*/
intQueueEmpty(SeqQueue*sq); /*判队空*/
voidInQueue(SeqQueue*sq,ElemTypex); /*循环队列入队*/
ElemTypeOutQueue(SeqQueue*sq,ElemTypex);/*循环队列出队*/
ElemTypeGetQueue(SeqQueue*sq);/*取队头元素*/
voidmain()
{
SeqStack*s;
SeqQueue*sq;
ElemTypex;
intn,i;
printf("
(1)初始化栈s\n");
s=(SeqStack*)malloc(sizeof(SeqStack));
InitStack(s);
printf("
(2)栈为%s\n",(StackEmpty(s)?
"空":
"非空"));
printf("(3)输入要进栈的数据个数:
");
scanf("%d",
printf("依次输入进栈的%d个整数:
",n);
/*数据依次进栈*/
for(i=0;i
top=-1;
}
/*判栈空*/
intStackEmpty(SeqStack*s)
{
if(s->top==-1)
return1; /*栈空返回1*/
else
return0; /*否则返回0*/
}
/*判栈满*/
intStackFull(SeqStack*s)
{
if(s->top==MaxSize-1)
return1; /*栈满返回1*/
else
return0; /*否则返回0*/
}
/*进栈*/
voidPush(SeqStack*s,ElemTypex)
{
if(StackFull(s))
{
printf("栈满溢出错误!
\n");
exit
(1);
}
s->top++;
s->data[s->top]=x;
}
/*出栈*/
ElemTypePop(SeqStack*s)
{
if(StackEmpty(s))
{
printf("栈下溢错误!
\n");
exit
(1);
}
s->top--;
returns->data[s->top+1]; /*返回原栈顶元素值*/
}
/*取栈顶元素*/
ElemTypeGetTop(SeqStack*s)
{
if(StackEmpty(s))
{
printf("栈下溢错误!
\n");
exit
(1);
}
returns->data[s->top];
}
/*依次输出从栈顶到栈底的元素*/
voidDispStack(SeqStack*s)
{
inti;
for(i=s->top;i>=0;i--)
printf("%d",s->data[i]);
printf("\n");
}
/*输出栈底元素*/
voidDispBottom(SeqStack*s)
{
printf("%d",s->data[0]);
printf("\n");
}
/*初始化队列*/
voidInitQueue(SeqQueue*sq)
{
sq->front=sq->rear=0;
}
/*判队空*/
intQueueEmpty(SeqQueue*sq)
{
if(sq->rear==sq->front)
return1;
else
return0;
}
/*循环队列入队*/
voidInQueue(SeqQueue*sq,ElemTypex)
{
if((sq->rear+1)%MaxSize==sq->front) /*队满*/
{
printf("循环队列已满!
\n");
exit
(1);
}
sq->data[sq->rear]=x;
sq->rear=(sq->rear+1)%MaxSize;
}
/*循环队列出队*/
ElemTypeOutQueue(SeqQueue*sq,ElemTypex)
{
if(QueueEmpty(sq)) /*队空*/
{
printf("循环队列已空,不能进行出队操作!
\n");
exit
(1);
}
else{
x=sq->data[sq->front];
sq->front=(sq->front+1)%MaxSize;
returnx;
}
}
/*取队头元素*/
ElemTypeGetQueue(SeqQueue*sq)
{
if(QueueEmpty(sq))
{
printf("队列已空,不能进行出队操作!
\n");
exit
(1);
}
returnsq->data[sq->front];
}
实验结果:
实
验
小
结
实验的心得体会:
1、栈和队列都是运算受限的线性表。
栈是后进先出(LIFO)表,只能在栈顶做插入删除运算。
队列是先进先出(FIFO)表,在队尾插入,在队头删除。
2、实验中采用的是顺序存储的栈和循环队列,要注意栈空、栈满、队空、队满的判断。
实验思考:
1、通过实验了解栈与队列的过程。
指
导
教
师
评
语
指导教师王老师日期:
6-10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构本 作业 数据结构 提交 实验 报告 参考 答案 398