用c语言编写一个具有出队,入队功能的链队列
时间: 2024-04-29 18:26:47 浏览: 11
好的,这个问题属于技术类问题,我可以回答。链队列是一种使用链表实现队列的方法。在链队列中,使用链表的指针来指向队列的头和尾,通过操作头指针和尾指针来实现队列的入队和出队操作。下面是使用C语言所实现的链队列代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
//定义链表节点结构体
typedef struct node{
int data; //数据域
struct node *next; //指针域
}Node;
//定义链队列结构体
typedef struct{
Node *front; //头指针指向队头
Node *rear; //尾指针指向队尾
}LinkQueue;
//队列的初始化
void init_queue(LinkQueue *q){
q->front = q->rear = (Node *)malloc(sizeof(Node)); //头结点
q->front->next = NULL;
}
//判断队列是否为空
int is_empty(LinkQueue q){
return q.front == q.rear;
}
//入队操作
void en_queue(LinkQueue *q, int x){
Node *p = (Node *)malloc(sizeof(Node));
p->data = x;
p->next = NULL; //插入节点指针域为空
q->rear->next = p; //插入节点到队尾
q->rear = p; //队尾指针指向新的节点
}
//出队操作
int de_queue(LinkQueue *q){
if(is_empty(*q)) //队列为空
return -1;
Node *p = q->front->next; //记录要删除的头结点
int x = p->data;
q->front->next = p->next; //将头结点后移
if(q->rear == p) //如果将要删除的节点是尾结点
q->rear = q->front; //将队尾指针指向头结点
free(p); //释放被删除的节点
return x;
}
int main(){
LinkQueue q;
init_queue(&q); //初始化队列
en_queue(&q, 1); //入队
en_queue(&q, 2);
en_queue(&q, 3);
printf("%d ", de_queue(&q)); //出队并打印队头元素
printf("%d ", de_queue(&q));
printf("%d ", de_queue(&q));
return 0;
}
```