队列的添加和删除

队列

先进先出,头部添加,尾部删除

typedef struct Node
{
	int nVal;
	struct Node* pNext;

}Queue;

队列的添加

构造一个结点,当头结点不为空时,让尾结点的pNext指向pTemp,把新结点插入链表成为最后一个元素。

当头结点为空时,说明该链表为空,直接让头结点等于新结点。

最后再让新结点成为尾结点,把新结点赋给尾结点

void Push(Queue** ppHead, Queue** ppEnd, int nVal)
{
	Queue* pTemp = malloc(sizeof(Queue));
	pTemp->nVal = nVal;
	pTemp->pNext = NULL;
	if (*ppHead == NULL)
	{
		*ppHead = pTemp;
	}
	else
	{
		(*ppEnd)->pNext = pTemp;
	}
	*ppEnd = pTemp;

}

队列的删除

首先判断队列是否为空,如果为空就不进行操作输出-1.

队列不为空时,先创建一个中间节点,把要删除的节点(头结点)赋给中间节点,再把头结点的下一个结点赋给头结点,这时原来头结点的内容就被转移到了中间结点,再把中间结点中包含的值提取出来用来输出,证明删除的是哪个结点,然后再把中间结点进行释放,free(pDel);,释放过后要把pDel结点赋空值,还要判断头结点是否为空,如果头结点为空,则说明该队列不含元素,要把尾结点也进行赋空值,最后再返回提取的值n,说明删除的是哪个结点。

测试队列的主函数和头文件

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

int main()
{

	Queue* pHead = NULL;
	Queue* pEnd = NULL;

	Push(&pHead, &pEnd, 1);
	Push(&pHead, &pEnd, 2);
	Push(&pHead, &pEnd, 3);

	printf("%d\n", Pop(&pHead, &pEnd));
	printf("%d\n", Pop(&pHead, &pEnd));
	printf("%d\n", Pop(&pHead, &pEnd));

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值