用链队列作存储结构,实现队列(元素为整型)的基本运算。 链队列的类型定义: typedef int ElemType; typedef struct QNode { ElemType data; struct QNode *next; }QNode; typedef struct { QNode *front; QNode *rear; }LinkQueue;
时间: 2024-03-27 22:37:35 浏览: 76
好的,我来为您解答。
首先,我们需要实现链队列的初始化操作:
```
void InitQueue(LinkQueue *Q) {
QNode *node = (QNode*)malloc(sizeof(QNode));
node->next = NULL;
Q->front = Q->rear = node;
}
```
接下来,我们实现队列的入队操作:
```
void EnQueue(LinkQueue *Q, ElemType e) {
QNode *node = (QNode*)malloc(sizeof(QNode));
node->data = e;
node->next = NULL;
Q->rear->next = node;
Q->rear = node;
}
```
然后,我们实现队列的出队操作:
```
ElemType DeQueue(LinkQueue *Q) {
if (Q->front == Q->rear) {
printf("队列已空,无法出队!\n");
return -1;
}
QNode *node = Q->front->next;
ElemType e = node->data;
Q->front->next = node->next;
if (Q->rear == node) {
Q->rear = Q->front;
}
free(node);
return e;
}
```
最后,我们实现队列的销毁操作:
```
void DestroyQueue(LinkQueue *Q) {
while (Q->front) {
QNode *node = Q->front;
Q->front = node->next;
free(node);
}
Q->rear = NULL;
}
```
这样,我们就实现了基本的队列操作。您可以按照以下方式使用该链队列:
```
LinkQueue Q;
InitQueue(&Q);
EnQueue(&Q, 1);
EnQueue(&Q, 2);
EnQueue(&Q, 3);
printf("%d\n", DeQueue(&Q));
printf("%d\n", DeQueue(&Q));
printf("%d\n", DeQueue(&Q));
DestroyQueue(&Q);
```
输出结果应该为:
```
1
2
3
```
希望能帮到您!
阅读全文