数据结构04队列的基本操作Word格式文档下载.docx
《数据结构04队列的基本操作Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构04队列的基本操作Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
![数据结构04队列的基本操作Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-11/25/bd377c93-73aa-4497-8cde-8fbda761c463/bd377c93-73aa-4497-8cde-8fbda761c4631.gif)
结构关系:
R={<
ai,ai+1>
|ai,ai+1∈D}
基本操作:
InitQueue(LinkQueue*Q)
操作前提:
Q是一个未初始化的链接队列
操作结果:
将Q初始化为一个空的链接队列
EnQueue(LinkQueue*Q,QElemTypee)
链接队列Q已存在
将元素e插入到链接队列中
DeQueue(LinkQueue*Q,QElemType*e)
将链接队列Q中队头元素删除,删除的元素值通过e返回
0utputQueue(LinkQueueQ)
操作结果:
将链接队列Q中的元素显示到屏幕上
}
本程序包含5个函数:
•主函数main()
•初始化链接队列函数InitQueue()
•进队函数EnQueue()
•出队函数DeQueue()
•输出队列中元素函数OutputStack()
各函数调用关系:
主函数main调用其他四个函数
主函数的伪码
main()
{
定义变量i,n,m;
定义一个LinkQueue变量Lq
初始化Lq;
输入队列元素的个数;
For循环(i=1;
i<
=n;
i++)
{调用EnQueue函数;
}
输出队列中元素;
调用DeQueue函数;
显示删除的队头元素;
显示Lq;
}
(2)环形队列
ADTSqQueue{
InitQueue(SqQueue&
Q)
Q是一个未初始化的环型队列
将Q初始化为一个空的环型队列
EnQueue(SqQueue*Q,inte)
环型队列Q已存在
将元素e插入到队列中
DeQueue(SqQueue*Q,int*e)
将环型队列Q中队头元素删除,删除的元素值通过e返回
outPutQMeue(SqQueue*Q)
将环型队列Q中的元素显示到屏幕上
本程序包含5个函数:
函数的伪码
{定义SqQueue变量sq;
定义整型变量n,i,m;
构造空的环型队列;
输入队列的长度;
For循环(i=1;
输出队列元素;
删除对头元素;
4.详细设计
(1)类型定义
typedefstructQNode{
intdata;
structQNode*next;
}QNode,*QueuePtr;
typedefstruct{
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
基本操作的伪码算法
(1)初始化
voidInitQueue(LinkQueue*Q){
Q->
front=Q->
rear==申请新结点;
Q->
front->
next=NULL;
(2)进队
voidPush(SqStack&
S,inte)
定义QueuePtr变量p;
p=申请新的空间;
如果申请失败,结束程序
p->
data=e;
如果是第一个元素则{Q->
next=p;
rear->
rear=p;
(3)出队
intPop(SqStack*S,inte)
{
如果队空则返回0;
p=Q->
next;
*e=p->
data;
next=p->
如果Q->
rear==p则Q->
rear=Q->
front;
;
释放p的空间;
返回1;
(4)输出元素
intOutputQueue(LinkQueueQ)
p=Q.front->
while(p)
{
printf("
%d"
p->
data);
p=p->
}
\n"
);
返回1;
类型定义
typedefstruct{
int*base;
intfront;
intrear;
}SqQueue;
voidInitQueue(SqQueue&
Q){
Q.base=申请新的空间;
如果申请失败,结束程序;
Q.front=Q.rear=0;
intEnQueue(SqQueue*Q,inte)
{如果队满了则返回1;
base[Q->
rear]=e;
rear=(Q->
rear+1)%MAXQSIZE;
返回0;
出队
intDeQueue(SqQueue*Q,int*e)DeQueue(SqQueue*Q,int*e)
如果队空则返回1;
*e=Q->
front];
front=(Q->
front+1)%MAXQSIZE;
voidoutPutQMeue(SqQueue*Q)
{
定义整型变量i;
For循环(i=Q->
rear;
{输出Q->
base[i];
换行;
5.调试分析
调试是出现错误,经过检查发现在某些地方分号用中文表示,出现空指针问题。
出现空指针问题,内存不能读取等
6.使用说明
(1)链接队列:
程序执行过程如下:
提示用户输入元素个数;
用户按要求输入一个整型数;
程序输出构造好的链接队列;
调用出队函数,并把剩余元素显示在屏幕上;
(2)环型队列:
提示用户输入队列元素个数;
程序用输入的整型数构建一个环型队列,并输出队列元素;
调用出栈函数,删除栈顶,显示栈中元素;
7.测试结果
构造一个空的链接队列后,屏幕显示:
请输入队列的元素个数:
输入5后,
屏幕显示建立的队列元素:
12345
调用出队函数后,屏幕显示:
2345
建立空队列,程序运行后屏幕显示:
输入队列元素的长度
屏幕显示队列的元素:
接着屏幕又显示:
队列中的第一个元素为:
1
调用出队函数,然后输入队列中元素:
8.参考文献
数据结构(c语言版)
9.附录
源程序文件如下:
#include<
stdlib.h>
stdio.h>
typedefstructQNode{
intdata;
structQNode*next;
}QNode,*QueuePtr;
typedefstruct{
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
voidInitQueue(LinkQueue*Q)
rear=(QNode*)malloc(sizeof(QNode));
voidEnQueue(LinkQueue*Q,inte)
QueuePtrp;
p=(QueuePtr)malloc(sizeof(QNode));
if(!
p)exit
(1);
p->
if(Q->
next==NULL)
{Q->
Q->
intDeQueue(LinkQueue*Q,int*e)
front==Q->
rear)return0;
p=Q->
*e=p->
rear==p){Q->
free(p);
return1;
intOutputQueue(LinkQueueQ)
if(Q.front==Q.rear)return0;
p=Q.front->
while(p)
{
printf("
p=p->
}
voidmain()
{inti,n;
intm;
LinkQueueLq;
构造一个空的链接队列"
InitQueue(&
Lq);
\n请输入队列的元素个数:
"
scanf("
%d"
&
n);
for(i=1;
EnQueue(&
Lq,i);
队列中的元素为:
OutputQueue(Lq);
DeQueue(&
Lq,&
m);
删除队列中的第一个元素\n此时队列中的元素为:
#defineMAXQSIZE100
typedefstruct{
int*base;
intfront;
intrear;
}SqQueue;
voidInitQueue(SqQueue&
Q.base=(int*)malloc(MAXQSIZE*sizeof(int));
Q.base)exit
(1);
Q.front=Q.rear=0;
intEnQueue(SqQueue*Q,inte)
if((Q->
rear+1)%MAXQSIZE==Q->
front)return1;
return0;
intDeQueue(SqQueue*Q,int*e)
rear)return1;
*e=Q->
voidoutPutQMeue(SqQueue*Q)
inti;
for(i=Q->
printf("
Q->
base[i]);
SqQueuesq;
intn,i,m;
构造空的环型队列\n"
InitQueue(sq);
请输入队列的长度:
sq,i);
队列的元素为:
outPutQMeue(&
sq);
DeQueue(&
sq,&
队列中的第一个元素为:
m);
\n删除对头元素,输出队列元素: