链队列和循环队列数据结构实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
淮海工学院计算机科学系实验报告书
课程名:《数据结构》
题目:数据结构实验
链队列和循环队列
班级:
学号:
姓名:
线性数据结构算法实现与应用报告要求
1目的与要求:
1)掌握栈与队列的数据类型描述及特点;
2)掌握栈的顺序和链式存储存表示与基本算法的实现;
3)掌握队列的链式存储表示与基本操作算法实现;
4) 掌握栈与队列在实际问题中的应用和基本编程技巧;
5)按照实验题目要求,独立完成实际程序的编写编写、调试和运行,并通过用例数据的运行过程抓获相关屏面验证程序设计的正确性;
7)认真书写实验报告,并按时提交。
2 实验内容或题目
以下题目学生根据自己的兴趣和能力可选作一道作为实验题目:
1)根据栈数据结构,分别建立一个顺序栈和链式栈并实现其上基本操作(出栈和入栈等);
2)根据队列数据结构,分别建立链队列和循环队列,并完成其上的基本操作(出入队列等);
3)参考书上表达式求值例题,应用栈的基本操作实现带括号表达式求值运算及其进出栈模拟过程(给出程序执行过程中栈的变化过程);
4)阅读P83栈与递归的实现一节内容和3阶汉诺塔问题。使用栈数据结构解决3阶汉诺塔问题,编写程序并模拟栈及其汉诺塔的搬运过程(给出程序执行过程栈的变化过程与圆盘的搬动状态)。
5)其它实际应用举例(如打印杨辉三角形)。
3 实验步骤与源程序
链队列
#include
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef struct QNode
{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
int InitQueue(LinkQueue &Q)
{
Q.rear=Q.front=(QueuePtr)malloc(sizeof(QNode)); if(!Q.rear)
exit(OVERFLOW);
Q.front->next=NULL;
return OK;
}
void QueueEmpty(LinkQueue Q)
{
if(Q.front==Q.rear)
printf("该链队为空:");
else
printf("该链队不为空:");
}
void EnQueue(LinkQueue &Q,int e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)
printf("error");
p->data=e;
Q.rear->next=p;
Q.rear=p;
printf("元素%d入队成功",e);
}
int EnnQueue(LinkQueue &Q,int e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)
return ERROR;
p->data=e;
Q.rear->next=p;
Q.rear=p;
return OK;
}
void DeQueue(LinkQueue &Q)
{
QueuePtr p;
if(Q.front==Q.rear)
printf("该链队为空");
p=Q.front->next;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
printf("队首元素删除成功");
}
void GetHead(LinkQueue &Q)
{
QueuePtr p;
if(Q.front==Q.rear)
printf("该链队为空");
p=Q.front->next;
printf("队首元素为:%d",p->data);
}
void OutQueue(LinkQueue &Q)
{
QueuePtr p;
if(Q.front==Q.rear)
printf("该链队为空");
p=Q.front->next;
while(p!=Q.rear->next)
{
printf("%d",p->data);
p=p->next;
}
}
void LengthQueue(LinkQueue &Q)
{
int f=0;
QueuePtr p;
if(Q.front==Q.rear)
printf("该队列的长度是:%d",f); else
{
p=Q.front->next;
while(p!=Q.rear->next)
{
p=p->next;
f++;
}
printf("该队列的长度是:%d",f); }
}
void main()
{
system("cls");
int flag=1,i;
LinkQueue Q;