|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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 函数将队首元素出队,并输出出队元素的值。
希望可以帮到你!
|
|