数据结构——使用C语言 链式队列的实现

链式队列操作包括

//定义数据结构

/*初始化队列*/
void QueueInitiate(LQueue* Q);


/*队列是否为空*/
//队列为空返回0,否则返回1
int QueueNotEmpty(LQueue Q);


/*入队列*/
//在队列Q中插入元素x
//插入成功返回1,否则返回0
int QueueAppend(LQueue* Q, DataType x);


/*取队头元素*/
//取队列Q的当前队头元素,由x返回
//取成功返回1,否则返回0
int QueueGet(LQueue Q, DataType* x);


/*出队列*/
//删除队列当中的数据元素,删除的数据元素由x返回
//出队列成功返回1,否则返回0
int QueueDelete(LQueue* Q, DataType* x);


/*撤销动态内存空间*/
void QueueDestroy(LQueue Q);

1.定义结构体

//定义数据元素
typedef int DataType ;
typedef struct qnode
{
	DataType data;
	struct qnode *next;
}LQNode;

//定义队头指针和队尾指针
typedef struct
{
	LQNode* front;
	LQNode* rear;
}LQueue;

2.初始化队列

/*初始化队列*/
void QueueInitiate(LQueue* Q)
{
	Q->front = NULL;
	Q->rear = NULL;
}

2.队列是否为空

/*队列是否为空*/
//队列为空返回0,否则返回1
int QueueNotEmpty(LQueue Q)
{
	if (Q.front == NULL)
	{
		printf("当前链表为空");
		return 0;
	}
	else
		return 1;
}

3.入队列

/*入队列*/
//在队列Q中插入元素x
//插入成功返回1,否则返回0
int QueueAppend(LQueue* Q, DataType x)
{
	LQNode* p;
	p = (LQNode*)malloc(sizeof(LQNode));
	p->data = x;
	p->next = NULL;
	if (Q->rear != NULL)
	{
		Q->rear->next= p;
	}
	Q->rear = p;
	if (Q->front == NULL)
		Q->front = p;
	return 1;
}

4.取对队头元素

/*取队头元素*/
//取队列Q的当前队头元素,由x返回
//取成功返回1,否则返回0
int QueueGet(LQueue Q, DataType* x)
{
	if (Q.front == NULL)
	{
		printf("当前队列为空,无法取队头元素");
		return 0;
	}
	else
	{
		*x = Q.front->data;
		return 1;
	}
}

5.出队列

/*出队列*/
//删除队列当中的数据元素,删除的数据元素由x返回
//出队列成功返回1,否则返回0
int QueueDelete(LQueue* Q, DataType* x)
{
	LQNode* p;
	if (Q->front == NULL)
	{
		printf("当前队列为空,无法出队列");
		return 0;
	}
	else
	{
		*x = Q->front->data;
		p = Q->front;
		Q->front = Q->front->next;
		if (Q->front == NULL)
			Q->rear = NULL;
		free(p);
		return 1;
	}
}

6.撤销动态内存空间

/*撤销动态内存空间*/
void QueueDestroy(LQueue Q)
{
	LQNode* p, * q;
	p = Q.front;
	while (p != NULL)
	{
		q = p;
		p=p->next;
		free(q);
	}
}

代码测试如下

#include<stdio.h>
#include"queuelist.h"  //包含链式队列头文件
int main()
{
	LQueue lqueuelist;
	int i, x;
	QueueInitiate(&lqueuelist);
	for (i = 0; i < 10; i++)
	{
		QueueAppend(&lqueuelist, i + 1);
	}
	QueueGet(lqueuelist, &x);
	printf("当前队头元素为 %d\n", x);
	while (QueueNotEmpty(lqueuelist))
	{
		QueueDelete(&lqueuelist, &x);
		printf("%d  ", x);
	}
}

程序运行结果如下

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值