首页 > 其他 > 详细

链表初解(四)——队列的入队和出队

时间:2014-03-29 20:48:43      阅读:403      评论:0      收藏:0      [点我收藏+]

自己复习了一下简单队列的基本操作,其中要注意的是队头和队尾要始终保持位置正确~还是老习惯,上代码+注释啦~

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;
}

运行示例:

bubuko.com,布布扣

Ps:仅供参考哈~

链表初解(四)——队列的入队和出队,布布扣,bubuko.com

链表初解(四)——队列的入队和出队

原文:http://blog.csdn.net/zenail501129/article/details/22478329

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!