初始化一个数据元素为整型的顺序镇环以列和链以列? 通过控制台scanf区数将工、2、3、4、5进顺序循坏队列,出顺序循环队列两次,并将出队元素入以列。 在从链队列中出队两次,输出顺序循环以列中的元素;
时间: 2024-02-13 22:00:48 浏览: 49
c代码-输入一个整数n,显示由 n 的数字构成的金字塔,第n层 由数字 n 构成。
以下是实现该功能的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
typedef struct {
int data;
} ElemType;
typedef struct {
ElemType *base;
int front;
int rear;
} SqQueue;
typedef struct QNode {
ElemType data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
} LinkQueue;
// 初始化顺序循环队列
void initSqQueue(SqQueue *Q) {
Q->base = (ElemType*) malloc(MAXSIZE * sizeof(ElemType));
Q->front = Q->rear = 0;
}
// 入顺序循环队列
void enSqQueue(SqQueue *Q, ElemType e) {
if ((Q->rear + 1) % MAXSIZE == Q->front) {
printf("Queue is full.\n");
return;
}
Q->base[Q->rear] = e;
Q->rear = (Q->rear + 1) % MAXSIZE;
}
// 出顺序循环队列
void deSqQueue(SqQueue *Q, LinkQueue *LQ) {
if (Q->front == Q->rear) {
printf("Queue is empty.\n");
return;
}
enQueue(LQ, Q->base[Q->front]);
Q->front = (Q->front + 1) % MAXSIZE;
}
// 初始化链式队列
void initLinkQueue(LinkQueue *Q) {
Q->front = Q->rear = (QueuePtr) malloc(sizeof(QNode));
if (!Q->front) {
exit(1);
}
Q->front->next = NULL;
}
// 入链式队列
void enQueue(LinkQueue *Q, ElemType e) {
QNode *p = (QueuePtr) malloc(sizeof(QNode));
if (!p) {
exit(1);
}
p->data = e;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
}
// 出链式队列
void deQueue(LinkQueue *Q) {
if (Q->front == Q->rear) {
printf("Queue is empty.\n");
return;
}
QNode *p = Q->front->next;
printf("%d ", p->data.data);
Q->front->next = p->next;
if (Q->rear == p) {
Q->rear = Q->front;
}
free(p);
}
int main() {
SqQueue sqQ;
LinkQueue lQ;
initSqQueue(&sqQ);
initLinkQueue(&lQ);
ElemType e;
for (int i = 0; i < 5; i++) {
scanf("%d", &e.data);
enSqQueue(&sqQ, e);
}
// 出顺序循环队列两次
deSqQueue(&sqQ, &lQ);
deSqQueue(&sqQ, &lQ);
// 将出队元素入链式队列
deQueue(&lQ);
deQueue(&lQ);
// 输出顺序循环队列中的元素
while (sqQ.front != sqQ.rear) {
printf("%d ", sqQ.base[sqQ.front].data);
sqQ.front = (sqQ.front + 1) % MAXSIZE;
}
printf("\n");
return 0;
}
```
该程序中,我们定义了两个队列,一个是顺序循环队列(`SqQueue`),一个是链式队列(`LinkQueue`)。我们首先通过 `scanf` 从控制台输入 5 个整数,并将它们依次插入到顺序循环队列中。然后我们从顺序循环队列中依次取出两个元素,并将它们插入到链式队列中。最后,我们再次遍历顺序循环队列,将其中的元素依次输出到控制台上。
需要注意的是,我们在实现顺序循环队列时,使用了取模运算符 `%`,这是为了让队列可以循环利用数组中的空间。同时,在出队列时,我们将元素插入到链式队列中,而链式队列的实现中,我们使用了链表的头指针和尾指针来表示队列的头尾。在出链式队列时,我们需要注意更新头尾指针的位置。
阅读全文