链队列和循环队列数据结构实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档