队列的基本操作(c语言版)

队列的基本操作(c语言版)

队列是数据结构中一种顺序结构,故名思意可以理解为我们日常站队等,先进入队列的数据排在前头,所以先出队列,后进入队列的数据后出队列。而且队列是只能从队尾进入,队头离开,由于出数据只能从队头出,所以选用链表来实现队列更加方便。、
这里将会实现队列的增删以及初始化等基础接口。
先定义一个队列的结构体
typedef int DataType;

typedef struct QueueNode
{
	DataType _data;
	struct QueueNode* _next;
}QueueNode;

typedef struct Queue
{
	QueueNode* _head;
	QueueNode* _tail;
}Queue;
对队列进行初始化
void QueueInit(Queue* q)
{
	q->_head = (QueueNode*)malloc(sizeof(QueueNode));
	q->_head->_next = NULL;
	q->_tail = q->_head;
}
建立队列结点
QueueNode* BuyNewNode(DataType x)
{
	QueueNode* q;
	q = (QueueNode*)malloc(sizeof(QueueNode));
	q->_next = NULL;
	q->_data = x;
	return q;
}
打印队列
void QueuePrint(Queue* q)
{
	QueueNode* ptr;
	ptr = q->_head->_next;
	if (q->_head->_next == NULL)
	{
		printf("该队列为空!\n");
	}
	else
	{
		while (ptr)
		{
			printf("%d->",ptr->_data);
			ptr = ptr->_next;
		}
	}
	printf("NULL");
}
增加数据
void QueuePush(Queue* q, DataType x)
{   
	QueueNode*  _new;
	if (q->_head ->_next== NULL)
	{
		q->_tail = BuyNewNode(x);
		q->_head->_next = q->_tail;
	}
	else
	{
		q->_tail->_next = BuyNewNode(x);
		q->_tail = q->_tail->_next;
	}
}
删除数据
void QueuePop(Queue* q)
{
	QueueNode* ptr;
	ptr = q->_head->_next;
	if (q->_head->_next == 0)
	{
		printf("该队列为空!\n");
	}
	else
	{
		q->_head->_next = q->_head->_next->_next;
		free(ptr);
	}
}
返回第一个数据
DataType QueueFront(Queue* q)
{
	return q->_head->_next->_data;
}
数据数量
size_t QueueSize(Queue* q)
{
	size_t num = 0;
	QueueNode*ptr = q->_head->_next;
	while (ptr)
	{
		ptr=ptr->_next;
		num++;
	}
	return num;
}
队列判空
int QueueEmpty(Queue* q)
{
	if (q->_head->_next = NULL)
		return 0;
	else
		return 1;
}








猜你喜欢

转载自blog.csdn.net/qq9116136/article/details/80056373