队列——初始化队列 、入队列、出队列、获取队列头部元素 、获取队列队尾元素 、获取队列中有效元素个数 、判空、销毁队列

队列的结构体:


typedef QNode* QDataType;

// 链式结构:表示队列 
typedef struct QNode
{
	struct QNode* pNext;
	QDataType data;
}QNode;

// 队列的结构 
typedef struct Queue
{
	QNode *head;		// 链表的第一个结点
	QNode *last;		// 链表的最后一个结点
}Queue;

函数功能汇总:

// 初始化队列 
void QueueInit(Queue* q); 

// 队尾入队列 
void QueuePush(Queue* q, QDataType data); 

// 队头出队列 
void QueuePop(Queue* q); 

// 获取队列头部元素 
QDataType QueueFront(Queue* q); 

// 获取队列队尾元素 
QDataType QueueBack(Queue* q); 

// 获取队列中有效元素个数 
int QueueSize(Queue* q); 

// 检测队列是否为空,如果为空返回非零结果,如果非空返回0 
int QueueEmpty(Queue* q); 

// 销毁队列 
void QueueDestroy(Queue* q); 

初始化队列:

//初始化队列
void QueueInit(Queue* q)
{
	q->head = q->last = NULL;
}

 队尾入队列(入队列):

// 队尾入队列   //入队列
void QueuePush(Queue* q, QDataType data)
{
	QNode *node = (QNode *)malloc(sizeof(QNode));
	node->data = data;
	node->pNext = NULL;
	if (q->head == NULL)
	{
		q->head = node;
		q->last = node;
	}
	else
	{
		q->last->pNext = node;
		q->last = node;
	}
}

队头出队列(出队列):

// 队头出队列   //出队列
void QueuePop(Queue* q)
{
	QNode* node = (QNode*)malloc(sizeof(QNode));
	node = q->head;
	free(q->head);
	q->head = node;

	// last 有没有可能也需要变更
	if (q->head == NULL) {
		q->last = NULL;
	}
}

获取队列头部元素 :

// 获取队列头部元素 
QDataType QueueFront(Queue* q)
{
	return q->head->data;
}

获取队尾元素:

// 获取队列队尾元素 
QDataType QueueBack(Queue* q)
{
	return q->last->data;
}

获取队列中有效元素个数 :

// 获取队列中有效元素个数 
int QueueSize(Queue* q)
{
	int size;
	for (QNode* c=q->head ; c !=NULL; c=c->pNext)
	{
		size++;
	}
	return size;
}

判空:

// 检测队列是否为空,如果为空返回非零结果,如果非空返回0 
int QueueEmpty(Queue* q)
{
	if (q->head == NULL)
		return 1;
	else
		return 0;
}

销毁队列:

// 销毁队列 
void QueueDestroy(Queue* q)
{
	QNode* node;
	for ( node =q->head; node !=NULL; node=node->pNext)
	{
		free(node);
	}
	q->head = NULL;
	q->last = NULL;
}

猜你喜欢

转载自blog.csdn.net/qq_42659468/article/details/89540390