C数据结构之队列(链表实现)

4 篇文章 0 订阅
4 篇文章 0 订阅

单向链表最基本的结构是有 数据 和指向下一节点的地址
头文件

#ifndef QUEUE_LIST_INCLUDE
#define QUEUE_LIST_INCLUDE
#include<sys/types.h>
/*节点*/
typedef struct Queue_node{
	int data;/*数据*/
	struct Queue_node* next;
	/*下一节点的地址*/
}QUEUE_NODE;
/*队列*/
typedef struct queue_l{
	/*头和尾*/
	QUEUE_NODE* front;
	QUEUE_NODE* rear;
}QUEUE_LIST;
/*初始化队列*/
void queue_init(QUEUE_LIST *queuee);
/*销毁队列*/
void queue_deinit(QUEUE_LIST *queue);
/*判空*/
int queue_empty(QUEUE_LIST *queue);
/*入队*/
void queue_push(QUEUE_LIST *queue,int data);
/*出队*/
int queue_pop(QUEUE_LIST *queue);
/*输出队首*/
int queue_front(QUEUE_LIST *queue);
/*元素数量*/
size_t queue_size(QUEUE_LIST *queue);
#endif

源文件实现调用函数并编译运行

#include"queue_list.h"
#include<stdio.h>
#include<stdlib.h>
/*分配添加创建节点内存*/
QUEUE_NODE*  create_node(int data)
{
	QUEUE_NODE* node=malloc(sizeof(QUEUE_NODE));
	node->data=data;
	node->next=NULL;
	return node;
}
/*删除节点*/
QUEUE_NODE* destory_node(QUEUE_NODE *node)
{
	/*先存下一节点地址后释放内存,最后返回下一节点地址*/
	QUEUE_NODE *next= node->next;
	free(node);
	return next;
}
/*初始化队列*/
void queue_init(QUEUE_LIST *queue)
{
	queue->front=NULL;
	queue->rear=NULL;
}
/*清除队列*/
void queue_deinit(QUEUE_LIST *queue)
{
	while(queue->front)
		queue->front=destory_node(queue->front);
	    queue->rear=NULL;
}
/*判空*/
int queue_empty(QUEUE_LIST *queue)
{
	return !queue->front && !queue->rear;
}
/*入队*/
void queue_push(QUEUE_LIST *queue,int data)
{
	QUEUE_NODE* rear=create_node(data);
	/*尾部有节点*/
	if(queue->rear)
	{
		queue->rear->next=rear;
	}
	/*队列为空此节点为第一个,尾和头都是此节点*/
	else
	queue->front=rear;
	queue->rear=rear;
}
/*出队*/
int queue_pop(QUEUE_LIST *queue)
{
	int data=queue->front->data;
	/*输出数据,并且判断队列是否为空,*/
	if(!(queue->front=destory_node(queue->front)))
	{
		queue->rear=NULL;
	}
	return data;
}
/*输出队首*/
int queue_front(QUEUE_LIST *queue)
{
	return queue->front->data;
}
/*输出队列元素数量*/
size_t queue_size(QUEUE_LIST *queue)
{
	size_t size=0;
	/*此节点用于遍历队列*/
	QUEUE_NODE *find=queue->front;
	for(;find;find=find->next)
		size++;
	return size++;
}
int main()
{
	int i;
	QUEUE_LIST queue_list;

	queue_init(&queue_list);
	for(i=0;i<5;i++)
	{
		queue_push(&queue_list,i+1);
		printf("%d",i+1 );
	}
	printf("\n");
	printf("队首为:%d\n",queue_front(&queue_list));
	printf("数量为:%d\n",queue_size(&queue_list));
	printf("出队为:\n");
	while(!queue_empty(&queue_list))
		printf("%d\n",queue_pop(&queue_list));
	queue_deinit(&queue_list);
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值