用C语言实现链队列的初始化、入队、出队等操作
时间: 2024-06-17 11:03:46 浏览: 136
链队列的各种基本操作
5星 · 资源好评率100%
链队列是一种基于链表的队列,相比于顺序队列,它没有固定的队列长度,因此具有更好的灵活性。以下是用C语言实现链队列的初始化、入队、出队等操作:
1. 链队列的定义:
```c
typedef struct QNode{
int data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct{
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
}LinkQueue;
```
2. 链队列的初始化:
```c
void InitQueue(LinkQueue *Q){
Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode)); //创建头结点
if(!Q->front){
exit(0); //内存分配失败
}
Q->front->next = NULL;
}
```
3. 入队操作:
```c
void EnQueue(LinkQueue *Q, int e){
QueuePtr p = (QueuePtr)malloc(sizeof(QNode)); //创建新结点
if(!p){
exit(0); //内存分配失败
}
p->data = e;
p->next = NULL;
Q->rear->next = p; //将新结点插入到队尾
Q->rear = p; //修改队尾指针
}
```
4. 出队操作:
```c
int DeQueue(LinkQueue *Q, int *e){
if(Q->front == Q->rear){ //队列为空
return 0;
}
QueuePtr p = Q->front->next; //取出队头结点
*e = p->data;
Q->front->next = p->next; //修改队头指针
if(Q->rear == p){ //如果删除的是最后一个结点,则需要修改队尾指针
Q->rear = Q->front;
}
free(p); //释放空间
return 1;
}
```
阅读全文