基于C语言的队列实现

->Gitee源码点击这里<-
队列也是线性表,队列在实现时用链表效率更高。
队列的数据处理遵循先进先出原则,所以设计队列的接口时,需要设计头删接口和尾插接口,才能达到先进进出的效果。
队列逻辑示意图
在这里插入图片描述

单链表实现,自然要有结点,所以我们要先创建单链表结点的结构体

typedef struct Node
{
   
	QDatatype data;
	struct Node* next;
};

光有结点还不足以表示队列,队列的核心在于队头和队尾,有了这两个元素才方便我们设计相应的数据处理接口,所以我们在定义一个队列的结构体

typedef struct Queue
{
   
	Node* head;
	Node* tail;
};

在主函数中创建一个队列类型的变量,即创建了一个队列,该变量下有两个指针成员,分别指向了队列的第一个结点和最后一个结点

int main()
{
   
	Queue myqueue;
}

队列创建后,需要对队列进行初始化,队列刚被创建时,队列中没有元素,所以头指针和尾指针都指向NULL

void QueueInit(Queue* pq)
{
   
	assert(pq);
	pq->head = pq->tail = NULL;
}

接着,我们需要设计数据处理接口
一、入队
我们需要做如下思考:
a.第一个数据结点入队时该作何处理?
第一个结点入队时,headtail同时指向该结点
b.此后该如何处理?
当队中有结点之后,再入结点时,先让原来的tail指向的最后一个结点中的next存放新节点的地址,然后tail再指向新结点
示意图:
image.png

void QueuePush(Queue* pq, QDatatype data)
{
   
	//入队首先要创建一个新结点出来
	Node
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值