3 实现队列的入队操作

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 ++;

}

相关文档
最新文档