栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

链式队列示例(c)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

链式队列示例(c)

#include 
#include 
#include 

//设计节点
typedef struct LQnode
{
	int data;              //值域
	struct LQnode *next;   //next指针
}Lqueue, *LQueue;

//设计队列
typedef struct queue
{
	LQueue front;         //指向队首节点的指针
	LQueue rear;          //指向队尾节点的指针
}Queue, *Queue_l;


//初始化队列   创建一个队列,队列里面包含一个头节点
Queue_l Init_queue(void)
{
	Queue_l lq = malloc(sizeof(Queue));         //申请大小为Queue的内存
	
	if(lq != NULL)
	{
		lq->front = malloc(sizeof(Lqueue));
		lq->rear = lq->front;
		lq->rear->next = NULL;

		return lq;
	}
	return 0;
}

//判空
bool Is_empty(Queue_l lq)
{
	//队首指针和队尾指针相等则空,返回true,否则返回false
	return lq->front == lq->rear;
}

//入队  尾部添加
bool Enter_queue(Queue_l lq, int da)
{
	LQueue new_node = malloc(sizeof(Lqueue));     //为新节点申请一片内存

	if(new_node != NULL)
	{
		new_node->data = da;
		new_node->next = NULL;

		lq->rear->next = new_node;                //把新节点添加到队尾
		lq->rear       = new_node;                //更新队尾指针的位置
		
		return true;
	}

	return false;
}

//出队, 队头出
bool Out_queue(Queue_l lq, int *da)
{
	//先判空
	if(Is_empty(lq))
	{
		printf("队空!n");
		return false;
	}

    *da = lq->front->next->data;       //先存值

	LQueue temp_n = lq->front->next;   //临时指针temp指向队首节点的下一个节点

	lq->front->next = temp_n->next;    //更新队首节点的next指针
	free(temp_n);                      //释放掉第一个节点

	if(lq->front->next == NULL)        //出队之后,如果队空
	{
		lq->rear = lq->front;          //更新队尾指针的位置,不更新导致队尾指针丢失
	}

	return true;

}

//打印队列
bool Show_queue(Queue_l lq)
{
	if(Is_empty(lq))
	{
		printf("队空!n");
		return false;
	}

	LQueue pos = lq->front->next;    //临时节点指针指向队首节点的next

	while(pos != NULL)               //当temp不为空时
	{
		printf("%dn", pos->data);    //打印temp的值域

		pos = pos->next;       //temp指向下一个节点
	}

	return true;

}

//销毁队列
bool Destory_queue(Queue_l lq)
{
	if(Is_empty(lq))
	{
		free(lq);
		return true;
	}

	int data;
	while(lq->front->next != NULL)
	{
		Out_queue(lq, &data);
		printf("OUT: %dn", data);
	}

	free(lq);

	return true;
}

int main()
{
	Queue_l lq = Init_queue();

	for(int i = 0; i < 5; ++i)
	{
		Enter_queue(lq, i);
	}

	Show_queue(lq);

	int data;
	Out_queue(lq , &data);
	printf("out: %dn", data);

	Show_queue(lq);

	Destory_queue(lq);
}

结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/303374.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号