自己复习了一下简单队列的基本操作,其中要注意的是队头和队尾要始终保持位置正确~还是老习惯,上代码+注释啦~
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->first = Q->first->next;
free(temp);//别忘了释放哦~
}
return Q;
}
//打印队列
void print(queue *Q)
{//与单链表的处理一样
node *temp;
temp = Q->first;
printf("Output the Queue : ");
while(1)
{
if(temp == NULL) break;
if(temp != Q->rear) printf("%d<-", temp->data);
else printf("%d\n", temp->data);
temp = temp->next;
}
}
int main()
{
queue *Q = NULL;
int x;
printf("Insert Queue (end with 0) : ");
//插入队列
while(scanf("%d", &x) != EOF && x != 0)
{
Q = insert(Q, x);
}
print(Q);
//出队
printf("\nAfter deleting~\n");
Q = del(Q);
print(Q);
printf("\n");
return 0;
}
运行示例:
Ps:仅供参考哈~
链表初解(四)——队列的入队和出队,布布扣,bubuko.com
原文:http://blog.csdn.net/zenail501129/article/details/22478329