数据结构C语言|链队列

数据结构C语言|链队列,第1张

数据结构C语言|链队列

数据结构C语言|链队列

// 链队列程序.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include 
#include 
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

typedef int Status;
//链队列结构类型定义
typedef int QElemType;

typedef struct QNode
{ //链队列结点的类型定义
	QElemType data;
	struct QNode * next;
}* QueuePtr;

typedef struct
{ //链队列的表头结点的的类型定义
	QueuePtr front; //队头指针,指向链表的头结点
	QueuePtr rear; //队尾指针,指向队尾结点
}linkQueue;
//链队列初始化函数定义
Status InitQueue(linkQueue& Q)
{
	Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
	if (!Q.front)exit(OVERFLOW);
	Q.front->next = NULL;
	return OK;
}
//链队列销毁函数定义
Status DestroyQueue(linkQueue& Q)
{
	while(Q.front)
	{
		Q.rear = Q.front->next;
		free(Q.front);
		Q.front = Q.rear;
	}
	return OK;
}
//链队列插入队尾元素函数定义
Status EnQueue(linkQueue & Q, QElemType e)
{
	QueuePtr p;
	p = (QueuePtr)malloc(sizeof(QNode));
	if (!p)exit(OVERFLOW);
	p->data = e;
	p->next = NULL;
	Q.rear->next = p;
	Q.rear = p;
	return OK;
}
//取链队列队头元素函数定义
Status GetHead(linkQueue Q, QElemType& e)
{
	if (Q.front == Q.rear)
		return ERROR;
	e = Q.front->next->data;
	return OK;
}
//链队列删除队头元素函数定义
Status DeQueue(linkQueue& Q, QElemType& e)
{
	QueuePtr p;
	if (Q.front == Q.rear)
		return OK;
	p = Q.front->next;
	e = p->data;
	Q.front->next = p->next;
	if (Q.rear == p)
		Q.rear = Q.front;
	return OK;
}
int main()
{
	//变量定义
	linkQueue Q;
	QElemType e;
	Status N = 10;
	//初始化链队列函数调用
	InitQueue(Q);
	printf("初始化队列成功n即将进行入队 *** 作:n");
	//顺序输入 10 个数,入队
	while (N--)
	{
		printf("第%d个数入队,还剩%d个数字未入队:", 10 - N, N);
		scanf_s("%d", &e);
		EnQueue(Q,e);
	}
	//取链队列队头元素函数调用
	GetHead(Q, e);
	printf("队头元素为:%dn",e);
	//出链队列,依次打印输出 10 个数
	while (Q.front != Q.rear)
	{
		DeQueue(Q, e);
		printf("取第%d个数为:%dn", N+2, e);
		N++;
	}
	//链队列销毁函数调用
	DestroyQueue(Q);
	printf("队列销毁成功");
	return 0;
}

运行结果:

初始化队列成功
即将进行入队 *** 作:
第1个数入队,还剩9个数字未入队:1
第2个数入队,还剩8个数字未入队:2
第3个数入队,还剩7个数字未入队:3
第4个数入队,还剩6个数字未入队:4
第5个数入队,还剩5个数字未入队:5
第6个数入队,还剩4个数字未入队:6
第7个数入队,还剩3个数字未入队:7
第8个数入队,还剩2个数字未入队:8
第9个数入队,还剩1个数字未入队:9
第10个数入队,还剩0个数字未入队:0
队头元素为:1
取第1个数为:1
取第2个数为:2
取第3个数为:3
取第4个数为:4
取第5个数为:5
取第6个数为:6
取第7个数为:7
取第8个数为:8
取第9个数为:9
取第10个数为:0

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5100149.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存