|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
. 建立一个仅用尾指针标识的循环链队列,完成以下操作:
1) 根据输入的队列长度 n 和各元素值建立一个带头结点的循环链表表示的队列(循环链队列),并且只设一个尾指针来指向尾结点,然后输出队列中各元素值。
2) 将数据元素 e 入队,并输出入队后的队列中各元素值。
3) 将循环链队列的队首元素出队,并输出出队元素的值和出队后队列中各元素值。
请大佬们帮忙完善这个代码。#include<stdio.h>
#include<stdlib.h>
#define maxqsize 100
#define OK 1
#define ERROR 0
typedef int status;
typedef int qelemtype;
typedef struct cqnode {
qelemtype data; //数据域
struct cqnode *next; //指针域
}cqnode,*cqlink;
status cqlink_InitQueue (cqlink &rear)//创建一个空的循环链队列rear
{
rear=(cqnode*)malloc(sizeof(cqnode));
rear->next=rear;
return OK;
}
status cqlink_enqueue (cqlink &rear,qelemtype e)//在循环链队列rear中插入新的元素e,使其成为新的队尾元素
{
cqnode *q;
q=(cqnode*)malloc(sizeof(cqnode));
q->data=e;
q->next=rear->next;
rear->next=q;
rear=q;
return OK;
}
status cqlink_DeQueue (cqlink &rear,qelemtype &e)//在循环链队列rear中删除队首元素,并用e返回其值
{
cqnode *p=rear->next,*q;
if(rear==p)return ERROR;
q=p->next;
e=q->data;
if(q==rear) rear=p;
p->next=q->next;
free(q);
return OK;
}
status cqlink_Display(cqlink rear)//从队首到队尾,依次输出链队列中各数据元素的值
{
}
int main()
{
sqqueue q;
cqlink rear;
qelemtype e,count,x,c,t;
int n,i,j,m,z,y,f=1,d,g;
cqlink_InitQueue(rear);
printf("请问要入队几次:\n");
scanf("%d",&d);
printf("请输入要入队的数:\n");
for(i=0;i<d;i++)
{
scanf("%d",&e);
cqlink_InitQueue(rear);
}
printf("请问要出队几次:\n");
scanf("%d",&g);
printf("出队的数为:");
for(j=0;j<g;j++)
{
cqlink_DeQueue(rear,e);
printf("%d ",e);
}
return 0;
}
下面是完善后的代码:
#include<stdio.h>
#include<stdlib.h>
#define maxqsize 100
#define OK 1
#define ERROR 0
typedef int status;
typedef int qelemtype;
typedef struct cqnode {
qelemtype data; //数据域
struct cqnode *next; //指针域
}cqnode,*cqlink;
status cqlink_InitQueue (cqlink &rear)//创建一个空的循环链队列rear
{
rear=(cqnode*)malloc(sizeof(cqnode));
rear->next=rear;
return OK;
}
status cqlink_enqueue (cqlink &rear,qelemtype e)//在循环链队列rear中插入新的元素e,使其成为新的队尾元素
{
cqnode *q;
q=(cqnode*)malloc(sizeof(cqnode));
q->data=e;
q->next=rear->next;
rear->next=q;
rear=q;
return OK;
}
status cqlink_DeQueue (cqlink &rear,qelemtype &e)//在循环链队列rear中删除队首元素,并用e返回其值
{
cqnode *p=rear->next,*q;
if(rear==p) return ERROR;
q=p->next;
e=q->data;
if(q==rear) rear=p;
p->next=q->next;
free(q);
return OK;
}
status cqlink_Display(cqlink rear)//从队首到队尾,依次输出链队列中各数据元素的值
{
cqnode *p = rear->next->next;
while (p != rear->next) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return OK;
}
int main()
{
cqlink rear;
qelemtype e;
int n, i, j, d, g;
cqlink_InitQueue(rear);
printf("请输入队列长度:\n");
scanf("%d", &n);
printf("请输入队列元素值:\n");
for (i = 0; i < n; i++) {
scanf("%d", &e);
cqlink_enqueue(rear, e);
}
printf("队列中各元素值为:");
cqlink_Display(rear);
printf("请输入要入队的数:\n");
scanf("%d", &d);
printf("入队后队列中各元素值为:");
for (i = 0; i < d; i++) {
scanf("%d", &e);
cqlink_enqueue(rear, e);
}
cqlink_Display(rear);
printf("请输入要出队的次数:\n");
scanf("%d", &g);
printf("出队的数为:");
for (j = 0; j < g; j++) {
cqlink_DeQueue(rear, e);
printf("%d ", e);
}
printf("\n");
return 0;
}
这段代码实现了一个只带尾指针的循环链队列,并完成了入队和出队的操作。在主函数中,首先通过 cqlink_InitQueue 函数创建了一个空的循环链队列,并根据输入的队列长度和元素值,使用 cqlink_enqueue 函数将元素依次入队,并使用 cqlink_Display 函数输出队列中各元素值。接下来,根据输入的入队次数,使用 cqlink_enqueue 函数将元素入队,并再次使用 cqlink_Display 函数输出入队后的队列中各元素值。最后,根据输入的出队次数,使用 cqlink_DeQueue 函数将队首元素出队,并输出出队元素的值。
希望可以帮到你!
|
|