2024年最新【数据结构】C语言实现队列,面试必备知识点

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

{
assert(pq);

pq->phead = pq->ptail = NULL;
pq->size = 0;

}


##### 2.3 入队


入队相当于尾插,在入队时我们要考虑链表是否为空。



void QueuePush(Queue* pq, QDateType x)
{
assert(pq);

QNode* newnode = (QNode*)malloc(sizeof(QNode));
if (newnode == NULL)
{
	perror("malloc fail");
	return;
}
newnode->next = NULL;
newnode->val = x;

if (pq->ptail == NULL)
{
	pq->phead = pq->ptail = newnode;
}
else
{
	pq->ptail->next = newnode;
	pq->ptail = newnode;
}
pq->size++;

}


##### 2.4 出队


出队相当于头删,与之前不同的是,当我们删除最后一个节点,还要记得处理尾指针。



void QueuePop(Queue* pq)
{
assert(pq);
assert(pq->phead);

QNode* del = pq->phead;
pq->phead = pq->phead->next;
free(del);
del = NULL;
if (pq->phead == NULL)
{
	pq->ptail = NULL;
}
pq->size--;

}


##### 2.5 获取队头元素


队头元素就是头指针指向的节点的数据域。



QDateType QueueFront(Queue* pq)
{
assert(pq);
assert(pq->phead);

return pq->phead->val;

}


##### 2.6 获取队尾元素


我们通过尾指针可以直接找到队尾,不用遍历链表。



QDateType QueueBack(Queue* pq)
{
assert(pq);
assert(pq->phead);

return pq->ptail->val;

}


##### 2.7 判断空队列


利用bool的函数判断队列是否为空,当尾指针为空时,返回true;当尾指针不为空时,返回false。



bool QueueEmpty(Queue* pq)
{
assert(pq);

return pq->phead == NULL;

}


##### 2.8 队列的销毁



int QueueSize(Queue* pq)
{
assert(pq);

return pq->size;

}


#### 3. 队列完整源码


##### Queue.h



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

typedef int QDateType;

typedef struct QueueNode
{
QDateType val;
struct QueueType* next;
}QNode;

typedef struct Queue
{
QNode* phead;
QNode* ptail;
int size;
}Queue;

void QueueInit(Queue* pq);

void QueueDstroy(Queue* pq);

void QueuePush(Queue* pq, QDateType x);

void QueuePop(Queue* pq);

QDateType QueueFront(Queue* pq);

QDateType QueueBack(Queue* pq);

bool QueueEmpty(Queue* pq);

int QueueSize(Queue* pq);


##### Queue.c



#include"Queue.h"

void QueueInit(Queue* pq)
{
assert(pq);

pq->phead = pq->ptail = NULL;
pq->size = 0;

}

void QueueDstroy(Queue* pq)
{
assert(pq);

QNode* cur = pq->phead;
while (cur)
{
	QNode* next = cur->next;
	free(cur);
	cur = next;
}
pq->phead = pq->ptail = NULL;
pq->size = 0;

}

void QueuePush(Queue* pq, QDateType x)
{
assert(pq);

QNode* newnode = (QNode*)malloc(sizeof(QNode));
if (newnode == NULL)
{
	perror("malloc fail");
	return;
}
newnode->next = NULL;
newnode->val = x;

if (pq->ptail == NULL)
{
	pq->phead = pq->ptail = newnode;
}
else
{
	pq->ptail->next = newnode;
	pq->ptail = newnode;
}
pq->size++;

}

void QueuePop(Queue* pq)
{
assert(pq);
assert(pq->phead);

QNode* del = pq->phead;
pq->phead = pq->phead->next;
free(del);
del = NULL;
if (pq->phead == NULL)
{
	pq->ptail = NULL;
}
pq->size--;

}

QDateType QueueFront(Queue* pq)
{
assert(pq);
assert(pq->phead);

return pq->phead->val;

}

QDateType QueueBack(Queue* pq)
{
assert(pq);
assert(pq->phead);

return pq->ptail->val;

}

bool QueueEmpty(Queue* pq)
{
assert(pq);

return pq->phead == NULL;

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

0)]
[外链图片转存中…(img-3Tz1Udzf-1715666900790)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值