用c语言实现链队列,判空,入队,出队,输出,把输入的数存入n。先判n为何值。否则判队列是否为空;若为空则执行队列插入操作。若队列不为空,则与队头结点比较。比较相等,则执行队列的删除操作;否则执行插入操作。这个过程重复进行,直到输入0时结束 。
时间: 2023-06-13 18:07:41 浏览: 55
下面是基于C语言实现的链队列代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node, *QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
} LinkQueue;
void InitQueue(LinkQueue *Q) {
Q->front = Q->rear = (QueuePtr) malloc(sizeof(Node));
if (!Q->front) exit(0);
Q->front->next = NULL;
}
int QueueEmpty(LinkQueue Q) {
if (Q.front == Q.rear) return 1;
else return 0;
}
void EnQueue(LinkQueue *Q, int e) {
QueuePtr p = (QueuePtr) malloc(sizeof(Node));
if (!p) exit(0);
p->data = e;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
}
int DeQueue(LinkQueue *Q, int *e) {
QueuePtr p;
if (Q->front == Q->rear) return 0;
p = Q->front->next;
*e = p->data;
Q->front->next = p->next;
if (Q->rear == p) Q->rear = Q->front;
free(p);
return 1;
}
void PrintQueue(LinkQueue Q) {
QueuePtr p = Q.front->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
LinkQueue Q;
int n;
InitQueue(&Q);
printf("输入整数,以0结束:");
scanf("%d", &n);
while (n != 0) {
if (QueueEmpty(Q) || n == Q.front->next->data) {
DeQueue(&Q, &n); // 如果队列不为空或者n等于队头元素,出队
} else {
EnQueue(&Q, n); // 否则入队
scanf("%d", &n); // 继续输入
}
}
PrintQueue(Q); // 输出队列
return 0;
}
```
在这个程序中,我们首先定义了一个队列结构体,包含队头和队尾指针。然后实现了队列的初始化、判空、入队、出队和输出操作。在主函数中,我们先读入一个整数n,如果n为0则跳出循环,否则判断队列是否为空或者n是否等于队头元素,如果是则将队头元素出队,否则将n入队。这个判断过程不断重复,直到输入0结束。最后输出队列中的元素即可。