数据结构-----队列(C语言)

此代码在VS2013环境下实现:

#pragma once
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <Windows.h>

typedef int DataType;

typedef struct QNode{
	DataType data;
	struct QNode *pNext;
}QNode;

typedef struct Queue {
	QNode *pFront;//头指针
	QNode *pRear;//尾指针
	int size;
}Queue;

//增加节点
QNode* Create()
{
	return (QNode*)malloc(sizeof(QNode));
}

//初始化
void QueueInit(Queue *pQ)
{
	assert(pQ);
	pQ->pFront = pQ->pRear = NULL;
	pQ->size = 0;
}

//入队列
void QueuePush(Queue *pQ, DataType data)
{
	assert(pQ);
	pQ->size++;
	QNode* pNode = Create();
	assert(pNode);
	pNode->data = data;
	pNode->pNext = NULL;
	if (pQ->pFront == NULL&&pQ->pRear == NULL){
		pQ->pFront = pQ->pRear = pNode;
		return;
	}
	pQ->pRear->pNext = pNode;
	pQ->pRear = pNode;
}

//出队列
void QueuePop(Queue *pQ)
{
	assert(pQ);
	assert(pQ->size > 0);
	pQ->size--;
	QNode *pOldNode = pQ->pFront;
	pQ->pFront = pQ->pFront->pNext;
	free(pOldNode);

}

//返回队列首元素
DataType QueueFront(Queue* pQ)
{
	assert(pQ);
	if (pQ->size = 0){
		return -1;
	}
	return pQ->pFront->data;
}

//判断队列是否为空
DataType isEmpty(Queue *pQ)
{
	assert(pQ);
	return pQ->size > 0 ? 1 : 0;
}

//返回队列大小
DataType QueueSize(Queue* pQ)
{
	assert(pQ);
	return pQ->size;
}


//测试代码:
void test()
{
	Queue queue;
	printf("第一次判断:是否为空?(1不为空,0为空) %d \n", isEmpty(&queue));
	QueueInit(&queue);
	QueuePush(&queue, 1);
	QueuePush(&queue, 2);
	QueuePush(&queue, 3);
	QueuePush(&queue, 4);
	QueuePush(&queue, 5);
	QueuePush(&queue, 6);
	printf("第一次判断:队列大小为:%d \n", QueueSize(&queue));
	printf("第二次判断:是否为空?(1不为空,0为空) %d \n", isEmpty(&queue));
	QueuePop(&queue, 4);
	printf("第二次判断:队列大小为:%d \n", QueueSize(&queue));
	printf("队列首元素为:%d \n", QueueFront(&queue));
}

猜你喜欢

转载自blog.csdn.net/ChenGX1996/article/details/81780354