前期考虑
队列是两边都有开口,那么在链式情况下,线性表的链式那一边作为对头好呢?
从线性表的核心的插入和删除算法来看,如果在线性表链表的头部插入,每次循环都不会走,但是删除的时候,要删除线性表的尾部,要遍历整个 线性表。
都差不多。
我们考虑到在插入的时候,可能是批量插入,删除只是在某些条件成立的情况下才会删除,因此会将 线性表的头部做为 队列的头部,将线性表的尾部做为队列的尾部。
插入算法 核心代码
//正式插入数据,int i = 0;LinkListNode *curSeqListNode = &(tempseqlist->head);//让curSeqListNode 指向 链表的头部for (int i = 0; i < pos; ++i) {curSeqListNode = curSeqListNode->next;}node->next = curSeqListNode->next;curSeqListNode->next = node;tempseqlist->length++;return ret;
删除算法 核心代码
//辅助指针变量curSeqListNode,指向的位置是链表的头部LinkListNode *curSeqListNode = &(tempseqlist->head);//让curSeqListNode 指向 链表的头部int i = 0;for (i = 0; i < pos; ++i) {curSeqListNode = curSeqListNode->next;}retSeqListNode = curSeqListNode->next; //先将要删除的节点缓存出来curSeqListNode->next = retSeqListNode->next;// 删除的节点的next中保存着 “要删除元素的下一个元素”,让curseqlistnode->next 指向tempseqlist->length--;return retSeqListNode;