用C语言编写代码实现链队列的初始化、入队、出队等操作
时间: 2024-06-17 13:03:46 浏览: 116
链队列是一种基于链表实现的队列,它可以动态地分配内存空间,不会出现数组队列固定大小的问题。下面是用C语言实现链队列的初始化、入队、出队等操作的示例代码:
1.链队列的结构体定义
```
typedef struct QNode{
int data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct{
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
}LinkQueue;
```
2.链队列的初始化
```
void InitQueue(LinkQueue *Q){
Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode)); //初始化头结点
if(!Q->front) exit(0); //内存分配失败
Q->front->next = NULL; //头结点指针域为空
}
```
3.链队列的入队操作
```
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.链队列的出队操作
```
int DeQueue(LinkQueue *Q){
if(Q->front == Q->rear) exit(0); //空队列
QueuePtr p = Q->front->next; //记录要删除的结点
int e = p->data; //记录要删除的元素值
Q->front->next = p->next; //修改头结点指针
if(Q->rear == p) Q->rear = Q->front; //如果删除的是队尾结点,修改队尾指针
free(p); //释放删除的结点所占空间
return e;
}
```
阅读全文