|
发表于 2023-10-26 18:03:59
|
显示全部楼层
这是一个简单的只带尾指针的循环链队列的代码框架,需要完善cqlink_Display函数来输出链队列中各数据元素的值。
- #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;
- if (rear == p)
- return ERROR;
- cqnode* 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;
- while (p != rear)
- {
- printf("%d ", p->data);
- p = p->next;
- }
- if (p != NULL)
- printf("%d", p->data);
- printf("\n");
- return OK;
- }
- int main()
- {
- cqlink rear;
- qelemtype e;
- int n, i, j, d, g;
- cqlink_InitQueue(rear);
- printf("请问要入队几次:\n");
- scanf("%d", &d);
- printf("请输入要入队的数:\n");
- for (i = 0; i < d; i++)
- {
- scanf("%d", &e);
- cqlink_enqueue(rear, e);
- }
- printf("入队后的队列中各元素值为:");
- cqlink_Display(rear);
- printf("请问要出队几次:\n");
- scanf("%d", &g);
- printf("出队的数为:");
- for (j = 0; j < g; j++)
- {
- cqlink_DeQueue(rear, e);
- printf("%d ", e);
- }
- printf("\n");
- printf("出队后的队列中各元素值为:");
- cqlink_Display(rear);
- return 0;
- }
复制代码
这个代码将根据输入的队列长度和元素值创建了一个带头结点的循环链表表示的队列,并实现了入队和出队操作,最后输出相应的结果。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案 |
|