《数据结构》课程实验实训报告堆栈和队列的基本操作.docx
- 文档编号:4436085
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:17
- 大小:147.19KB
《数据结构》课程实验实训报告堆栈和队列的基本操作.docx
《《数据结构》课程实验实训报告堆栈和队列的基本操作.docx》由会员分享,可在线阅读,更多相关《《数据结构》课程实验实训报告堆栈和队列的基本操作.docx(17页珍藏版)》请在冰豆网上搜索。
《数据结构》课程实验实训报告堆栈和队列的基本操作
《数据结构》课程实验实训报告
实验名称
栈与队列
实验序号
3
学号
14302043
姓名
陈前方
班级
信管本二
实验日期
2015.11.15
指导教师
金照林
成绩
一、实验目的和要求
目的:
掌握堆栈和队列数据结构描述,学会针对堆栈和队列的基本操作。
要求:
掌握C语言结构化程序设计思想,结构数据类型,指针数据类型。
二、实验具体内容及步骤
1.实现课本中链式堆栈(p64-p66)的基本操作,并编制主函数实际运行验证其正确性。
2.链式堆栈设计。
要求:
(1)用链式堆栈设计实现堆栈,堆栈的操作集合包括:
初始化、非空否、入栈、出栈、取栈顶数据元素。
(2)设计一个主函数对链式堆栈进行测试。
测试方法为依次把数据元素1、2、3、4、5入栈,然后出栈并在屏幕上显示出栈的数据元素。
(3)定义数据元素的数据类型为如下形式的结构体:
typedefstruct{
chartaskName[10];//任务名
inttaskNo;//任务号
}DataType;
首先设计一个包含5个数据的测试数据,然后设计一个主函数对链式堆栈进行测试。
测试的方法为:
依次把5个元素入栈,然后出栈并在屏幕上显示出栈的数据元素。
3.实现课本中顺序循环队列(p75-p77)的基本操作,并编制主函数实际运行验证其正确性。
4.对顺序循环队列,常规的方法是使用队尾指针和队头指针,队尾指针用于指示当前的队尾位置下标,队头指针用于指示当前的队头位置下标。
现要求:
(1)设计一个使用队头指针和计数器的顺序循环队列抽象数据类型,其中操作包括:
初始化、入队列、出队列、取队头元素和判断队列是否为空。
(2)设计一个测试主函数进行测试。
三、实验结果与分析(程序代码按序粘贴在下面,并将运行结果截图)
1.#include
#include
typedefintDataType;
typedefstructsnode
{
DataTypedata;
structsnode*next;
}LSNode;/*初始化操作:
*/
voidStackInitiate(LSNode**head)
/*初始化带头结点链式堆栈*/
{
if((*head=(LSNode*)malloc(sizeof(LSNode)))==NULL)exit
(1);
(*head)->next=NULL;
}/*判非空操作:
*/
intStackNotEmpty(LSNode*head)/*判堆栈是否非空,非空返回1;空返回0*/
{
if(head->next==NULL)return0;elsereturn1;
}/*入栈操作:
*/
intStackPush(LSNode*head,DataTypex)/*把数据元素x插入链式堆栈head的栈顶作为新的栈顶*/{LSNode*p;if((p=(LSNode*)malloc(sizeof(LSNode)))==NULL){printf("内存空间不足无法插入!
\n");return0;}p->data=x;p->next=head->next;/*新结点链入栈顶*/head->next=p;/*新结点成为新的栈顶*/return1;}/*出栈操作:
*/
intStackPop(LSNode*head,DataType*d)/*出栈并把栈顶元素由参数d带回*/{LSNode*p=head->next;if(p==NULL){
printf("堆栈已空出错!
");
return0;
}
head->next=p->next;/*删除原栈顶结点*/
*d=p->data;/*原栈顶结点元素赋予d*/
free(p);/*释放原栈顶结点内存空间*/
return1;
}/*取栈顶数据元素操作:
*/
intStackTop(LSNode*head,DataType*d)/*取栈顶元素并把栈顶元素由参数d带回*/
{
LSNode*p=head->next;
if(p==NULL)
{
printf("堆栈已空出错!
");
return0;
}
*d=p->data;
return1;
}/*撤销*/
voidDestroy(LSNode*head)
{
LSNode*p,*p1;
p=head;
while(p!
=NULL)
{
p1=p;
p=p->next;
free(p1);
}
}
voidmain(void)
{
LSNode*myStack;
inti,x;
StackInitiate(&myStack);
for(i=0;i<5;i++)
{
if(StackPush(myStack,i+1)==0)
{
printf("error!
\n");
return;
}
}
if(StackTop(myStack,&x)==0)
{
printf("error!
\n");
return;
}
else
printf("Theelementoflocaltopis:
%d\n",x);
printf("Thesequenceofoutingelementsis:
\n");
while(StackNotEmpty(myStack))
{
StackPop(myStack,&x);
printf("%d",x);
}
printf("\n");
Destroy(myStack);
printf("Thisprogramismadeby10273206\n");
}
2.#include
#include
#defineMaxStackSize100
typedefintDataType;
typedefstruct
{
DataTypestack[MaxStackSize];;
inttop;
}SeqStack;/*初始化操作:
*/
voidStackInitiate(SeqStack*S)
/*初始化带头结点链式堆栈*/
{
S->top=0;
}
intStackNotEmpty(SeqStackS)
{
if(S.top<=0)
return0;
else
return1;
}/*入栈操作:
*/
intStackPush(SeqStack*S,DataTypex){
if(S->top>=MaxStackSize)
{
printf("堆栈已满无法插入!
\n");
return0;
}
else
{
S->stack[S->top]=x;
S->top++;
return1;
}
}
intStackPop(SeqStack*S,DataType*d)
{
if(S->top<=0)
{
printf("堆栈已空无数据元素出栈!
\n");
return0;
}
else
{
S->top--;
*d=S->stack[S->top];
return1;
}
}
intStackTop(SeqStackS,DataType*d)
{
if(S.top<=0)
{
printf("堆栈已空!
\n");
return0;
}
else
{
*d=S.stack[S.top-1];
return1;
}
}
voidmain(void)
{
SeqStackmyStack;
inti,x;
StackInitiate(&myStack);
for(i=0;i<5;i++)
{
if(StackPush(&myStack,i+1)==0)
{
printf("错误\n");
return;
}
}
if(StackTop(myStack,&x)==0)
{
printf("错误\n");
return;
}
else
printf("当前栈顶元素为:
%d\n",x);
printf("依次出栈的数据元素序列如下:
\n");
while(StackNotEmpty(myStack))
{
StackPop(&myStack,&x);
printf("%d",x);
}
}
3.#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#defineMaxQueueSize100
typedefintDataType;
typedefstruct
{
DataTypequeue[MaxQueueSize];
intrear;
intfront;
intcount;
}SeqCQueue;
voidQueueuInitiate(SeqCQueue*Q)
{
Q->rear=0;
Q->front=0;
Q->count=0;
}
intQueueNotEmpty(SeqCQueueQ)
{
if(Q.count!
=0)
return1;
else
return0;
}
intQueueAppend(SeqCQueue*Q,DataTypex)
{
if(Q->count>0&&Q->rear==Q->front)
{
printf("队列已满无法插入!
\n");
return0;
}
else
{
Q->queue[Q->rear]=x;
Q->rear=(Q->rear+1)%MaxQueueSize;
Q->count++;
return1;
}
}
intQueueDelete(SeqCQueue*Q,DataType*d)
{
if(Q->count==0)
{
printf("队列已空无数据元素出队列!
\n");
return0;
}
else
{
*d=Q->queue[Q->front];
Q->front=(Q->front+1)%MaxQueueSize;
Q->count--;
return1;
}
}
intQueueGet(SeqCQueueQ,DataType*d)
{
if(Q.count==0)
{
printf("队列已空无数据可取\n");
return0;
}
else
{
*d=Q.queue[Q.front];
return1;
}
}
voidmain(void)
{
SeqCQueuemyQueue;
inti,x;
QueueuInitiate(&myQueue);
for(i=0;i<5;i++)
{
if(QueueAppend(&myQueue,i+1)==0)
{
printf("error!
\n");
return;
}
}
if(QueueGet(myQueue,&x)==0)
{
printf("error!
\n");
return;
}
else
printf("队头元素是:
%d\n",x);
printf("依次出栈数据元素顺序是:
\n");
while(QueueNotEmpty(myQueue))
{
QueueDelete(&myQueue,&x);
printf("%d",x);
}
}
4.#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#defineMaxQueueSize100
typedefintDataType;
typedefstruct
{
DataTypequeue[MaxQueueSize];
intrear;
intfront;
intcount;
}SeqCQueue;
voidQueueuInitiate(SeqCQueue*Q)
{
Q->rear=0;
Q->front=0;
Q->count=0;
}
intQueueNotEmpty(SeqCQueueQ)
{
if(Q.front!
=Q.rear)
return1;
else
return0;
}
intQueueAppend(SeqCQueue*Q,DataTypex)
{
if(Q->front==(Q->rear+1)%MaxQueueSize)
{
printf("队列已满无法插入!
\n");
return0;
}
else
{
Q->queue[Q->rear]=x;
Q->rear=(Q->rear+1)%MaxQueueSize;
Q->count++;
return1;
}
}
intQueueDelete(SeqCQueue*Q,DataType*d)
{
if(Q->front==Q->rear)
{
printf("队列已空无数据元素出队列!
\n");
return0;
}
else
{
*d=Q->queue[Q->front];
Q->front=(Q->front+1)%MaxQueueSize;
Q->count--;
return1;
}
}
intQueueGet(SeqCQueueQ,DataType*d)
{
if(Q.front==Q.rear)
{
printf("队列已空无数据可取\n");
return0;
}
else
{
*d=Q.queue[Q.front];
return1;
}
}
voidmain(void)
{
SeqCQueuemyQueue;
inti,x;
QueueuInitiate(&myQueue);
for(i=0;i<5;i++)
{
if(QueueAppend(&myQueue,i+1)==0)
{
printf("error!
\n");
return;
}
}
if(QueueGet(myQueue,&x)==0)
{
printf("error!
\n");
return;
}
else
printf("队头元素是:
%d\n",x);
printf("依次出栈数据元素顺序是:
\n");
while(QueueNotEmpty(myQueue))
{
QueueDelete(&myQueue,&x);
printf("%d",x);
}
}
四、指导老师评语
指导老师签名:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程 实验 报告 堆栈 队列 基本 操作