双删除链表的结点中prior指向前驱结点的数据域?

循环单删除链表的结点的出现雖然能够实现从任一结点出发沿着链能找到其前驱结点,但时间耗费是O(n)

如果希望从表中快速确定某一个结点的前驱,另一个解决方法就是在单删除链表的结点的每个结点里再增加一个指向其前驱的指针域prior

这样形成的删除链表的结点中就有两条方向不同的链,我们可稱之为双(向)删除链表的结点(DoubleLinked List)双删除链表的结点的结构定义如下:

与单删除链表的结点类似,双删除链表的结点一般也是有头指針唯一确定的增加头结点也能使双删除链表的结点的某些运算变得方便。同时双向删除链表的结点也可以有循环表称为双向循环删除鏈表的结点,其结构如图2.15所示

由于在双向删除链表的结点中既有前向链又有后向链,寻找任一个结点的直接前驱结点与直接后继结点变嘚非常方便设指针p指向双删除链表的结点中某一结点,则有下式成立:

在双向删除链表的结点中那些只涉及后继指针的算法,如求表長度、取元素、元素定位等与单删除链表的结点中相应的算法相同,但对于前插和删除操作则涉及到前驱和后继两个方向的指针变化洇此与单删除链表的结点中的算法不同。

1.双向删除链表的结点的前插操作

算法描述:欲在双向删除链表的结点第i个结点之前插入一个新的結点则指针的变化情况如图2.16所示。

/*先检查待插入的位置i是否合法(实现方法同单删除链表的结点的前插操作)*/ /*若位置i合法则让指針p指向它*/

2.双向删除链表的结点的删除操作

算法描述:欲删除双向删除链表的结点中的第i个结点,则指针的变化情况如图2.17所示

/*首先检查待插入的位置i是否合法(实现方法同单删除链表的结点的删除操作)*/ /*若位置i合法,则让指针p指向它*/

双向删除链表的结点——删除两個双向删除链表的结点中相同的节点先找到相同的节点,放入删除链表的结点same然后两个删除链表的结点都删除与same相同的节点

这个程序没寫好写成了一坨屎

node *left; //指向什么类型的对象,就用什么类型的指针 if(n<1) //参数检测删除链表的结点最少有一个节点 p=head->right; //p重新指向头结点后的那个结点,即for循环创建的第一个结点 while(s) //如果head的第一个节点和same中有相同,则删除目的是让head的第一个节点与same删除链表的结点中节点都不同 { //因为head的头节點可以指向第一个节点,但第一个节点不能指向头结点这是删除链表的结点创建时决定的 display(list1); //输出显示建立的删除链表的结点,这里是讯删除链表的结点不用输出 display(list2); //输出显示建立的删除链表的结点,这里是讯删除链表的结点不用输出

循环单删除链表的结点的出现雖然能够实现从任一结点出发沿着链能找到其前驱结点,但时间耗费是On)如果希望从表中快速确定某一个结点的前驱,另一个解决方法就是在单删除链表的结点的每个结点里再增加一个指向其前驱的指针域prior这样形成的删除链表的结点中就有两条方向不同的链,我们可稱之为双(向)删除链表的结点(Double Linked List)双删除链表的结点的结构定义如下:

双删除链表的结点的结点结构如图2.14所示。

与单删除链表的结点類似双删除链表的结点一般也是有头指针唯一确定的,增加头结点也能使双删除链表的结点的某些运算变得方便同时双向删除链表的結点也可以有循环表,称为双向循环删除链表的结点其结构如图2.15所示。

由于在双向删除链表的结点中既有前向链又有后向链寻找任一個结点的直接前驱结点与直接后继结点变得非常方便。设指针p指向双删除链表的结点中某一结点则有下式成立:

在双向删除链表的结点Φ,那些只涉及后继指针的算法如求表长度、取元素、元素定位等,与单删除链表的结点中相应的算法相同但对于前插和删除操作则涉及到前驱和后继两个方向的指针变化,因此与单删除链表的结点中的算法不同

1.双向删除链表的结点的前插操作

算法描述:欲在双向删除链表的结点第i个结点之前插入一个新的结点,则指针的变化情况如图2.16所示

 /*先检查待插入的位置i是否合法(实现方法同单删除链表的結点的前插操作)*/

 /*若位置i合法,则让指针p指向它*/

2.双向删除链表的结点的删除操作

算法描述:欲删除双向删除链表的结点中的第i个结点則指针的变化情况如图2.17所示。

 /*首先检查待插入的位置i是否合法(实现方法同单删除链表的结点的删除操作)*/

 /*若位置i合法则让指针p指姠它*/

我要回帖

更多关于 链表中环的入口结点 的文章

 

随机推荐