云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 中国铁道出版社数据结构(第二版)单元4练习参考答案

中国铁道出版社数据结构(第二版)单元4练习参考答案

  • 62 次阅读
  • 3 次下载
  • 2025/5/7 3:47:16

while (!QEmpty(Q))

{

OutQueue (Q,y); printf(y); }; printf(x); }

答:输出为“CHAR”。

五.程序填空

1.假定用一个循环单链表表示一个循环队列,该队列只设一个队尾指针rear,试填空完成向循环队列中插入一个元素为x的结点的函数。

typedef struct queuenode // 定义队列的存储结构 { int data;

struct queuenode *next; }qu;

InQueue(rear,x) // 向队列插入元素为x的函数 { qu *rear; int x;

{ qu *head,*s; s= new qu ; s->data= x ;

if (rear==NULL) // 循环队列为空,则建立一个结点的循环队列 { rear=s; rear->next;} else

{ head= rear->next ; // 循环队列非空,则将s插到后面 rear->next= s ; rear=s;

rear->next =head;}

}

六. 算法设计题

1.设一个循环队列Queue,只有头指针front,不设尾指针,另设一个含有元素个数的记数器cont,试写出相应的入队算法和出队算法。

2.用一个循环数组Q[0..MAXLEN-1]表示队列时,该队列只有一个头指针front,不设尾指针,而改置一个记数器count用以记录队列中结点的个数。试编写一个能实现:初始化队列、判队空、读队头元素、入队操作和出队操作的算法。

83

3.一个用单链表组成的循环队列,只设一个尾指针rear,不设头指针,请编写他如下算法: (1) 向循环队列中插入一个元素为x的结点; (2) 从循环队列中删除一个结点。 1. 解:用一个循环数组Queue[0,n-1]表示该循环队列,头指针为front,计数器

count用来记录队列中结点的个数。 (1)入队算法:

void inqueqe(int x) { int temp;

if (count==n)

printf(\队列上溢出\\n\else

{ count++

temp=(front+count)%n; Queue[temp]=x }

}

(2)出队算法:

int outqueue() { int temp;

if (count==0)

printf(\队列下溢出\\n\else

{ temp=Queue[front]; front=(front+1)%n; count--;

return temp; } }

2.解:队列为空:count==0

队列为满:count=MAXLEN

队尾第一个元素位置==(front+count)%MAXLEN 队首第一个元素位置==(front+1)%MAXLEN const MAXLEN=100; int queue[MAXLEN];

int front,count; // 定义队头和计数器count

(1)初始化队列

void init() {

front=1; count=0; }

84

(2)判定队空

int QEmpty() {

if (count==0)

return(1);

else

return(0);}

(3)读队头元素

void ReadFront(int queue[],x)

{

if (count==0)

printf(\下溢出\\n\

else {

front=(front+1)%MAXLEN; x=queue[front];

} } (4)入队操作

void InQueue(int queue[],int x) {

int place;

if (count==MAXLEN)

printf(\上溢出\\n\

else {

count++;

place=(front+count)%MAXLEN; queue[MAXLEN]=x;

} } (5)出队操作

void OutQueue(int queue[]) // 删除队列头元素 {

if (count==0)

printf(\队列下溢出\\n\

else {

front=(front+1)%MAXLEN; count--;

} } 3.

85

(1)解:定义本题队列的结点类型如下:

typedef struct linknode {

int data;

struct linknode *next;

}qu;

qu *rear;

inqueue(int x) // 向队列插入结点x {

qu *head, *s;

s=(qu *) new qu; // 创建一个新结点 s->data=x;

if (rear==NUlL) // 若队空,则建立一个循环队列 {

rear=s;

rear->next=s; }

else // 若不为空,则将s插到后面 {

head=rear->next; rear->next=s;

rear=s; // rear始终指向最后一个结点 rear->next=head; } }

(2)解:

void delqueue(rear) {

if (rear==NULL)

printf(\下溢出!\\n\ else {

head=rear->next; // head指向队首结点 if (head==rear)

rear=NULL // 只有—个结点则直接删除该结点

else

rear->next=head->next // 否则删除第一个结点

delete head; // 释放队首结点 } }

86

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

while (!QEmpty(Q)) { OutQueue (Q,y); printf(y); }; printf(x); } 答:输出为“CHAR”。 五.程序填空 1.假定用一个循环单链表表示一个循环队列,该队列只设一个队尾指针rear,试填空完成向循环队列中插入一个元素为x的结点的函数。 typedef struct queuenode // 定义队列的存储结构 { int data; struct queuenode *next; }qu; InQueue(rear,x) // 向队列插入元素为x的函数 { qu *rear; int x; { qu *head,*s; s= n

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com