c语言用链表实现一个不带头结点的简单队列
时间: 2023-10-13 19:04:56 浏览: 97
好的,很高兴为你解答。下面是实现代码:
```
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType; // 元素类型
typedef struct QNode {
ElemType data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct {
QueuePtr front; // 队头指针
QueuePtr rear; // 队尾指针
} LinkQueue;
// 初始化队列
void initQueue(LinkQueue *Q) {
Q->front = Q->rear = NULL;
}
// 判断队列是否为空
int isEmpty(LinkQueue Q) {
return Q.front == NULL;
}
// 入队
void enQueue(LinkQueue *Q, ElemType e) {
QueuePtr p = (QueuePtr) malloc(sizeof(QNode));
p->data = e;
p->next = NULL;
if (isEmpty(*Q)) {
Q->front = Q->rear = p;
} else {
Q->rear->next = p;
Q->rear = p;
}
}
// 出队
ElemType deQueue(LinkQueue *Q) {
if (Q->front == NULL) {
printf("队列为空,出队失败!\n");
return -1;
}
QueuePtr p = Q->front;
ElemType e = p->data;
Q->front = p->next;
if (Q->rear == p) {
Q->rear = NULL;
}
free(p);
return e;
}
// 测试队列操作
int main() {
LinkQueue Q;
initQueue(&Q);
printf("入队:2 3 5 7 11 13\n");
enQueue(&Q, 2);
enQueue(&Q, 3);
enQueue(&Q, 5);
enQueue(&Q, 7);
enQueue(&Q, 11);
enQueue(&Q, 13);
printf("出队:\n");
while (!isEmpty(Q)) {
printf("%d ", deQueue(&Q));
}
printf("\n");
return 0;
}
```
希望对你有帮助。如果还有其他问题,请继续提问。
阅读全文