4.1C语言实现队列(单向不循环链表实现)

        队列先进先出,只能从队尾进入,从队首出去。出队列即删除头结点;进队列即在链表尾部添加新节点。


Queue.h文件

#pragma once
#include"stdio.h"
#include"stdlib.h"
#include"assert.h"
#include"stdbool.h"
typedef int QDataType;
typedef struct QueueNode {
	QDataType data;
	struct QNode* next;
}QNode;
typedef struct Queue {
	QNode* head;
	QNode* tail;
}Queue;
 void QueueInit(Queue* q);   //初始化
 void QueueDestroy(Queue* q);   //销毁
 void QueuePrint(Queue* q);   //以出队列形式打印
 QNode* QueueBuynewcode(QDataType x);   //创建新节点
 void QueuePush(Queue* q, QDataType x);   //插入x
 void QueuePop(Queue* q);   //出栈删除
 QDataType QueueFront(Queue* q);  //返回队首元素
 QDataType QueueBack(Queue* q);  //返回队尾元素
 bool QueueEmpty(Queue* q);   //判断队列是否为空
 int QueueSize(Queue* q);  //返回队列元素个数

Queue.c文件

#include"Queue.h"
//初始化
void QueueInit(Queue* q)
{
	q->head = NULL;
	q->tail = NULL;
}
//按从队首出打印
void QueuePrint(Queue* q)
{
	QNode* cur = q->head;
	while (cur)
	{
		printf("%d ",cur->data);
		cur = cur->next;
	}
	printf("\n");
}
//创建新节点
QNode* QueueBuynewcode(QDataType x)
{
		QNode* newcode = (QDataType*)malloc(sizeof(QDataType));
		newcode->data = x;
		newcode->next = NULL;
		return newcode;
}
//插入x
void QueuePush(Queue* q, QDataType x)
{
	QNode* Newcode = QueueBuynewcode(x);
	if (q->head == NULL)   //当队列为空时
		q->head = q->tail = Newcode;
	else
	{
		q->tail->next = Newcode;
		q->tail = Newcode;
	}
}
//出栈删除
void QueuePop(Queue* q)
{
	assert(q);
	assert(q->head);    //确保队列不为空
	QNode* next = q->head->next;
	free(q->head);
	q->head = next;	
}
//销毁
void QueueDestroy(Queue* q)
{
	assert(q);
	QNode* cur = q->head;
	while (cur != NULL)
	{
		QNode* next = cur->next;
		free(cur);
		cur = next;
	}
	q->head = q->tail = NULL;
}
//返回队首元素
QDataType QueueFront(Queue* q)
{
	return q->head->data;
}
//返回队尾元素
QDataType QueueBack(Queue* q)
{
	return q->tail->data;
}
//判断队列是否为空,为空返回1,不为空返回0
bool QueueEmpty(Queue* q)
{
	return q->head == NULL;
}
//返回队列元素个数
int QueueSize(Queue* q)
{
	int size = 0;
	QNode* cur = q->head;
	while (cur)
	{
		cur = cur->next;
		size++;
	}
	return size;
}

test.c文件

#include"Queue.h"
test()
{
	Queue qu;
	QueueInit(&qu);
	QueuePush(&qu,1);
	QueuePush(&qu, 2);
	QueuePrint(&qu);
	QueueDestroy(&qu);
}
int main()
{
	test();
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值