3 实现队列的入队操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实现队列的入队操作
函数原型:
void insertNode(struct Queue* queue , ElementType value){
}
其中参数queue 是带插入元素的队列指针,后面的value 当然就是需要插入的值了。
下面写具体的逻辑:
int isEmpty(struct Queue* queue){
// 判断队列是否为空,如果为空则返回 1
// 不为空则返回 0
return queue->count == 0;
}
void insertNode(struct Queue* queue , ElementType value){
// 创建一个新的节点 node ,并让这个节点的值等于value , next指针指向NULL
struct Node* node = newNode(value , NULL);
// 如果队列为空
if(isEmpty(queue)){
// 让 front 指针指向新的节点 node
queue->front = node;
//让 tail 指针指向新的节点 node
queue->tail = node;
/*
* 大家可以回想以想在图示的过程中,当队列
* 为空的时候,我是没画 front 指针和 tail指针的
* 这个时候让 font 和 tail 都指向空就好了,也就是初始化
* 的时候让 font 和 tail 都指向了 NULL(空)
* NULL 其实是一个宏,它的值是 0(整型 0)
* 当队列中添加了第一个元素的时候我才画出来
* font 指针和 tail 指针,并且让 font 和 tail
* 都指向了第一个节点,就想现在,如果队列在添加节点的时候为空
* 则执行上面的操作
* */
}else{ //如果队列不为空
/*
* 大家再看一下图示过程中,当队列中有一个节点的时候,
* 是如何添加节点的,在这里,直接让队尾的节点的 next
* 指向新来的节点 node 就可以了 , 并且新来的节点的 next 指向NULL * 最后再更新一下队尾指针 tail 让它指向新来的节点,
* 因为我们在队列中添加节点是向队尾添加的
* */
queue->tail->next = node;
queue->tail = node;
}
// 添加节点完成后,让计数器增加 1
queue->count ++;
}