编写一个链队列,实现入队、出队操作,判断队空等特殊
时间: 2024-05-22 17:17:07 浏览: 231
链式队列的实现,出队,入队等各种基本操作
4星 · 用户满意度95%
情况。请问如何实现?
可以使用链表来实现链队列。具体实现步骤如下:
1. 定义结点Node:包含数据域和指向下一个结点的指针next。
2. 定义链队列LinkedQueue:包含链表的头指针front和尾指针rear。
3. 实现入队操作Enqueue:先创建一个新的结点,将数据存入结点的数据域,将新结点插入到rear指针指向的结点后面,并将rear指针指向新结点。
4. 实现出队操作Dequeue:首先判断队空的情况,如果队空,则返回空;否则,将front指针指向下一个结点,并释放原来的头结点。
5. 判断队空操作IsEmpty:如果front和rear指针均指向NULL,说明队列为空。
实现代码如下:
//定义结点结构体
typedef struct Node
{
int data; //数据域
struct Node* next; //指向下一个结点的指针
}Node;
//定义链队列结构体
typedef struct LinkedQueue
{
Node* front; //头指针
Node* rear; //尾指针
}LinkedQueue;
//入队操作
void Enqueue(LinkedQueue* queue, int data)
{
Node* newNode = (Node*)malloc(sizeof(Node)); //创建新结点
newNode->data = data; //存储数据
newNode->next = NULL; //新结点指向NULL
if(queue->front == NULL) //如果队列为空,front指向新结点
{
queue->front = newNode;
}
else
{
queue->rear->next = newNode; //否则,新结点插入到rear指针指向的结点后面
}
queue->rear = newNode; //rear指向新结点
}
//出队操作
int Dequeue(LinkedQueue* queue)
{
if(queue->front == NULL) //如果队列为空,返回空
{
return NULL;
}
else
{
Node* tempNode = queue->front; //用一个临时结点记录头结点,方便释放内存
int data = tempNode->data; //记录即将删除的结点的数据
queue->front = tempNode->next; //头指针指向下一个结点
free(tempNode); //释放原来的头结点
if(queue->front == NULL) //如果队列中只有一个结点,删除后rear指向NULL
{
queue->rear = NULL;
}
return data;
}
}
//判断队空操作
int IsEmpty(LinkedQueue* queue)
{
if(queue->front == NULL && queue->rear == NULL) //如果front和rear指针均指向NULL,说明队列为空
{
return 1;
}
else
{
return 0;
}
}
阅读全文