队列-链式储存
队列的链式储存其实就是线性表的单链表,只不过它要遵循列队的规则,只能尾进头出,我们把它简称为链队列。
首先,创建结构体和头文件等
#include <stdio.h>
#include <stdlib.h>
typedef struct Queue{
int data;
struct Queue *next;//创建指针指向下一个结点
}Queue;
复制代码
初始化队列
Queue *initQueue()
{
Queue *queue = (Queue*)malloc(sizeof(Queue));//创建头结点。
queue->next = NULL;
return queue;
}
复制代码
进队列
Queue *enQueue(Queue * rear,int data)
{
Queue *enElem = (Queue*)malloc(sizeof(Queue));//创建新的结点
enElem->data = data;
enElem->next = rear;
rear->next = enElem;//从尾部插入
rear = enElem;
return rear;//返回尾部指针
}
复制代码
出队列
void deQueue(Queue *front,Queue *rear)
{
if (front->next == NULL) {
printf("队列为空");
return ;
}
Queue *p = front->next;//首结点
printf("%d", p->data);//出队列
front->next = p->next;//将头结点指针,指向下一个结点地址
if (rear == p) {//如果队尾指针等于队头指针,将队尾重新置为头结点。也就是空队列
rear = front;
}
free(p);//释放指针
}
复制代码
应用
int main()
{
Queue *front,*rear;
rear = front = initQueue();
rear = enQueue(rear,1);
rear = enQueue(rear, 2);
rear = enQueue(rear, 3);
rear = enQueue(rear, 4);
deQueue(front, rear);
deQueue(front, rear);
deQueue(front, rear);
deQueue(front, rear);
return 0;
}
复制代码