自己复习了一下简单队列的基本操作,其中要注意的是队头和队尾要始终保持位置正确~还是老习惯,上代码+注释啦~
Code:
#include<iostream>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}node;//定义指针结构
typedef struct queue
{
node *first, *rear;//定义队头、队尾指针。
}queue;
//入队
queue *insert(queue *Q, int x)
{
node *i;
//先创建要入队的节点。
i = (node *)malloc(sizeof(node));
i->data = x;
if(Q == NULL)
{//如果队列结构体为空(还未插入值),则创建队列结构体。
Q = (queue *)malloc(sizeof(queue));
Q->first = Q->rear = i;
Q->rear->next = NULL;
}
else
{//按顺序将节点入队。
Q->rear->next = i;
Q->rear = i;
i->next = NULL;
}
return Q;
}
//出队
queue *del(queue *Q)
{
node *temp; //先定义一个中间节点,以便将队头处理完后将原队头空间释放。
if(Q->first == NULL)
{//如果队列唯空,则报错退出。
printf("Queue is null !");
return NULL;
}
else
{//和单链表删除头节点的处理一样
temp = Q->first;
Q-&