数据结构-队列(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaomifanhxx/article/details/83904202

1    队列的定义

    队列(Queue)是一种先进先出的线性表,它只允许从表的一端进行插入,在另外一端进行删除结果,即跟我们排队一样排在前面的优先买票,最早买票的先离开,在队列中,允许中插入的一端叫做rear,删除的一端为front,效果图如下所示:

2    队列的分类

队列的分类主要为两类:

1)链式队列:链式队列即用链表实现的队列;

2)顺序队列:顺序队列即用数组实现的队列,通常顺序队列为循环队列;

如果用户的应用程序中设有循环队列,则必须为它设定一个最大队列长度,若用户无法预估所用队列的最大长度,则宜采用链式队列

队列的基本方法:队列的进出,清空,下面主要介绍链式队列的方法,下篇文章主要是顺序队列的方法;

3    链式队列

3.1链式队列的初始化

//链式队列
struct LinkList
{
	int val;
	LinkList *next;
};
struct LinkQueue
{
	LinkList *front, *rear;
};
LinkQueue* create_LinkQueue()
{
	LinkQueue *q = (LinkQueue*)malloc(sizeof(LinkQueue));
	q->front = q->rear = (LinkList*)malloc(sizeof(LinkList));
	if (q->front == NULL) return NULL;
	q->front->val = NULL;
	q->front->next = NULL;
	return q;
}

3.2 进队列

int in_LinkQueue(LinkQueue *q,int x)
{
	if (q->rear->val == NULL){ q->rear->val = x; return 1; }
	LinkList *Node = (LinkList*)malloc(sizeof(LinkList));
	Node->next = NULL;
	Node->val = x;
	q->rear->next = Node;
	q->rear = Node;
	return 1;
}

3.3  出队列

int out_LinkQueue(LinkQueue*q)
{
	LinkList *Node = q->front;;
	//Node = q->front;
	q->front =q->front->next;
	int ret = Node->val;
	free(Node);
	Node= NULL;
	return ret;
	
}

3.4  清空队列

void clear_LinkQueue(LinkQueue*s)
{
	if (is_Empty) printf("此队列为空");
	else
	{
		while (!is_Empty)
		{
			out_LinkQueue(s);
		}
		printf("此队列为空");
	}
}

3.5  遍历队列

void traverse(LinkQueue*s)
{
	if (is_Empty(s)) printf("此队列为空");
	else
	{
		LinkList *Node = s->front;
		int ret;
		while (Node!=NULL)
		{
			ret=Node->val;
			printf("输出为%d", ret);
			Node = Node->next;
		}
	}
}

3.6  判空队列

bool is_Empty(LinkQueue *s)
{
	if (s->front == s->rear) return true;
	else
	{
		return false;
	}
}

4  主程序

int main()
{
	LinkQueue *s = create_LinkQueue();
	//进队列
	in_LinkQueue(s, 11);
	in_LinkQueue(s, 12);
	in_LinkQueue(s, 13);
	traverse(s);
	//出队列
	out_LinkQueue(s);
	traverse(s);
	//clear_LinkQueue(s);
	//traverse(s);
	system("pause");
}

参考博客:

https://www.cnblogs.com/xiaoyouPrince/p/8125852.html

猜你喜欢

转载自blog.csdn.net/xiaomifanhxx/article/details/83904202