C语言链式队列简单实现

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>



//队列结构
typedef struct queueNode
{
	int data;
	struct queueNode *pNext;
}QUEUENODE_T;

typedef struct Linkqueue
{
	QUEUENODE_T  *front;     //队头
	QUEUENODE_T  *rear;      //队尾
}LINKQUEUE_T;


//初始化队列
LINKQUEUE_T *Creat_EmptyQueue()
{
	LINKQUEUE_T *NewQueue = NULL;

	NewQueue = (LINKQUEUE_T *)malloc(sizeof(LINKQUEUE_T));
	if (NewQueue == NULL)
	{
		printf("Creat_EmptyQueue failed.\n");
		return NULL;
	}

	NewQueue->front = NewQueue->rear = NULL;

	return NewQueue;
}

//判断队列是否为空
int Is_QueueEmpty(LINKQUEUE_T *pQueue)
{
	return (pQueue->front == NULL) ? 0 : -1;
}

//清空队列
void ClearQueue(LINKQUEUE_T *pQueue)
{
	QUEUENODE_T *pNode = NULL;

	pNode = pQueue->front;
	while (pNode != NULL)
	{
		pQueue->front = pQueue->front->pNext;
		free(pNode);
		pNode = pQueue->front;
	}
	pQueue->rear = NULL;
}

//销毁队列
int DestroyQueue(LINKQUEUE_T *pQueue)
{
	if (pQueue == NULL)
	{
		printf("DestroyQueue error,pQueue is null.\n");
		return -1;
	}
	else
	{
		ClearQueue(pQueue);
		free(pQueue);
	}
	return 0;
}

//入队
int InputQueue(LINKQUEUE_T *pQueue, int value)
{
	QUEUENODE_T *pNewqueue = NULL;

	if (pQueue == NULL)
	{
		printf("InputQueue: pQueue is NULL,inputqueue failed.\n");
		return -1;
	}

	pNewqueue = (QUEUENODE_T *)malloc(sizeof(QUEUENODE_T));
	pNewqueue->data = value;
	pNewqueue->pNext = NULL;

	if (Is_QueueEmpty(pQueue) == 0)      //队列为空
	{
		pQueue->front = pQueue->rear = pNewqueue;
	}
	else
	{
		pQueue->rear->pNext = pNewqueue;
		pQueue->rear = pNewqueue;
	}
	printf("<<<数据[%d]入队>>>\n", pNewqueue->data);

	return 0;
}

//出队
int OutputQueue(LINKQUEUE_T *pQueue)
{
	QUEUENODE_T *Newqueue = NULL;
	int tempdata = 0;

	if (pQueue == NULL)
	{
		printf("OutputQueue:pQueue is NULL,output queue failed.\n");
		return -1;
	}
	if (Is_QueueEmpty(pQueue) == 0)
	{
		printf("OutputQueue:front is null,output queue failed.\n");
		return -1;
	}

	Newqueue = pQueue->front;
	pQueue->front = pQueue->front->pNext;
	tempdata = Newqueue->data;
	printf(">>>>数据[%d]出队<<<<\n", Newqueue->data);

	free(Newqueue);

	return tempdata;
}

//遍历队列
int ErgodicQueue(LINKQUEUE_T *pQueue)
{
	QUEUENODE_T *Newqueue = NULL;
	int count = 1;

	if (pQueue == NULL)
	{
		printf("ErgodicQueue:pQueue is NULL.\n");
		return -1;
	}
	if (Is_QueueEmpty(pQueue) == 0)
	{
		printf("ErgodicQueue:front is null.\n");
		return -1;
	}

	Newqueue = pQueue->front;

	while (Newqueue != NULL)
	{
		printf(">>>>队列第[%d]个数据为[%d]<<<<\n", count, Newqueue->data);
		Newqueue = Newqueue->pNext;
		count++;
	}

}


//test
int main()
{
	LINKQUEUE_T *pQueueNew = NULL;

	pQueueNew = Creat_EmptyQueue();
	if (pQueueNew == NULL)
	{
		return -1;
	}

	//入队
	InputQueue(pQueueNew, 10);
	InputQueue(pQueueNew, 20);
	InputQueue(pQueueNew, 30);
	InputQueue(pQueueNew, 40);
	InputQueue(pQueueNew, 50);

	//遍历
	ErgodicQueue(pQueueNew);

	//出队
	OutputQueue(pQueueNew);
	OutputQueue(pQueueNew);
	OutputQueue(pQueueNew);
	OutputQueue(pQueueNew);
	OutputQueue(pQueueNew);
	OutputQueue(pQueueNew);


	system("pause");
	return 0;
}




测试结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值