【C语言】20191011 队列的链表实现

数据结构——队列的链表实现

#include<stdio.h>
#include<stdlib.h>

typedef struct Node//定义节点
{
	int Element;
	struct Node* Next;
}Node;

typedef struct Queue//定义队列
{
	Node* Front;//队头指针
	Node* Rear;//队尾指针
}Queue;

Queue* CreateQueue()//创建一个空队列
{
	Queue* q;

	q = (Queue*)malloc(sizeof(Queue));//给队列分配内存空间

	if (q == NULL)
		printf("分配内存空间失败!");

	q->Front = NULL;//让队头指针指向空,则该队列为空队列

	return q;
}

Queue* Enqueue(int X, Queue* q)//Enqueue入队
{
	Node* n;//定义一个新节点

	n = (Node*)malloc(sizeof(Node));//分配内存空间

	n->Element = X;//将X存入新节点
	n->Next = NULL;//新节点的指针指向NULL

	if (q->Front == NULL)//若该队列为空
	{
		q->Front = n;
		q->Rear = n;//让队头指针和队尾指针都指向新节点
	}
	else
	{
		q->Rear->Next = n;//否则,将队尾指针的下一个指针指向新节点
		q->Rear = n;//更新队尾指针使其指向新节点(新的队尾)
	}

	return q;
}

Queue* Dequeue(Queue* q)//Dequeue出队
{
	if (q->Front == NULL)
		printf("该队列为空!");//判断该队列是否为空

	if (q->Front == q->Rear)//若该队列只有一个元素
	{
		q->Front = NULL;
		q->Rear = NULL;//让该队列的Front和Rear指针都指向空
	}
	else//若该队列不只一个元素
		q->Front = q->Front->Next;//更新队头指针使其指向下一个元素

	return q;
}

void Display(Queue* q)
{
	Node* n;

	n = q->Front;//此处使用一个新指针n指向队头元素,通过改变n来实现队列打印,这样做能保证队头指针Front不被更新,否则在下一次入队判空时会出错

	if(n==NULL)
		printf("该队列为空!");//判断该队列是否为空

	while (n != NULL)
	{
		printf("%d", n->Element);
		n = n->Next;
	}

	printf("\n");
}

int main()
{
	Queue* q;
	int i;

	q = CreateQueue();//创建一个空队列

	for (i = 1; i < 10; i++)
	{
		q = Enqueue(i, q);//将1~9依次入队
		Display(q);//每次入队后打印当前队列中元素
	}

	q = Dequeue(q);//队头元素1出队

	Display(q);//打印出队后队列中元素
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值