欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

队列实现

程序员文章站 2022-07-14 12:26:07
...
typedef int QUDataType;
typedef struct QueueNode
{
	struct QueueNode* _next;
	QUDataType _data;
}QueueNode;
typedef struct Queue
{
	QueueNode* _front; // 队头
	QueueNode* _rear; // 队尾
}Queue;
//初始化
void QueueInit(Queue* pq)
{
	assert(pq);
	pq->_front = pq->_rear = NULL;
}
//销毁
void QueueDestory(Queue* pq)
{
	QueueNode* cur = pq->_front;
	while (cur)
	{
		QueueNode* next = cur->_next;
		free(cur);
		cur = next;
	}
	pq->_front = pq->_rear = NULL;
}
//尾插
void QueuePush(Queue* pq, QUDataType data)
{
	assert(pq);
	QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));
	newnode->_data = data;
	newnode->_next = NULL;
	if (pq->_rear == NULL)
	{
		pq->_rear = pq->_front = newnode;
	}
	else
	{
		pq->_rear->_next = newnode;
		pq->_rear = newnode;
	}
}
//出队
void QueuePop(Queue* pq)
{
	assert(pq);
	if (pq->_front->_next == NULL)
	{
		free(pq->_front);
		pq->_front = pq->_rear = NULL;
	}
	else
	{
		QueueNode* next = pq->_front->_next;
		free(pq->_front);
		pq->_front = next;
	}
}
//获取队头元素
QUDataType QueueFront(Queue* pq)
{
	assert(pq);
	return pq->_front->_data;
}
//获取队尾元素
QUDataType QueueBack(Queue* pq)
{
	assert(pq);
	return pq->_rear->_data;
}
//判断队列是否为空
int QueueEmpty(Queue* pq)
{
	return pq->_front == NULL ? 1 : 0;
}
//获取队列中有效元素个数
int QueueSize(Queue* pq)
{
	int n = 0;
	QueueNode* cur = pq->_front;
	while (cur)
	{
		n++;
		cur = cur->_next;
	}
	return n;
}

相关标签: 数据结构

上一篇: IBATIS简单操作

下一篇: vim简单操作