C语言中双向链表和双向循环链表详解
更新时间:2020年4月25日 17:31 点击:1976
双向链表和双向循环链表
和单向链表相比,多了一个前驱结点。如果他为空,那么next和prior都指向自己。而对于双循环链表,只需要最后一个元素的next指向head->next,head->next的prior指向最后一个节点即可。
插入操作
新节点s插入链表,s->next给p结点,s->prior给p->prior,然后,p->prior->next指向s,p->prior再指向s。顺序需要注意
s->next = p; s->prior = p->prior; p->prior->next = s; p->prior = s;
删除操作
删除结点p。p->next->prior 指向 p->prior,p->prior->next 指向 p->next 。最后将p结点delete。
p->prior->next = p->next; p->next->prior = p->prior; delete p;
实例操作
(附截图)
注意:因为函数没有返回Node*类型,所以这里对指针进行引用,否则在退出函数的时候,并没有保存改变。如果需要删除全部链表,需要保存InitList之后的head地址,否则会遗漏一个Node结点没有删除。
代码实现:
#include<iostream> #include<cstddef> #include<cstdio> using namespace std; const int OK = 1; const int ERROR = 0; const int LETTERNUM = 26; typedef char ElemType; struct Node{ ElemType data; Node * prior;//前驱结点 Node * next;//后驱结点 }; int InitList(Node *&L){ Node *p,*q; int i; L = new Node; //头结点 L->next = L->prior = NULL; p = L; //p是当前指针 for(int i=0;i<LETTERNUM;i++){ q = new Node; //q是临时指针 q->data = 'A' + i; q->prior = p; q->next = p->next; p->next = q; p = q;//指针移动 } p->next = L->next; //尾结点指向head->next(第一个有字母的地址) L->next->prior = p; return OK; } void Change(Node *&L,int i){ //移动头指针 if (i>0){ while(i--){ L = L->next; } } else if (i<0){ L = L->next ; while(i++){ L = L->prior; } } else{ L = L->next; } } int main(){ Node *head = NULL; int i,n; InitList(head); //Node *s_head = head; // 保存头结点之后删除 cout<<"输入位置:"<<endl; cin>>n; Change(head,n); for(i = 0;i<LETTERNUM;++i){ head = head->next; cout<<head->data<<" "; } cout<<endl; return 0; }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
上一篇: 老生常谈C++getline使用方法
下一篇: C语言 数据结构平衡二叉树实例详解
相关文章
- 这篇文章主要为大家详细介绍了JavaScript数据结构之双向链表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-07
Redis快速表、压缩表和双向链表(重点介绍quicklist)
这篇文章主要介绍了Redis快速表、压缩表和双向链表(重点介绍quicklist),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-06- 这篇文章主要介绍了数据结构 双向链表的创建和读取详解及实例代码的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C#双向链表LinkedList排序实现方法,涉及C#双向链表的定义与排序技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 下面小编就为大家带来一篇关于双向链表的增删改查和排序的C++实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了C语言双向链表实现根据使用频率安排元素位置的功能实例代码的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C语言中双向链表和双向循环链表详解的相关资料,需要的朋友可以参考下...2020-04-25
C++ STL入门教程(2) list双向链表使用方法(附程序代码)
这篇文章主要为大家详细介绍了C++ STL入门教程第二篇,list双向链表使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25- 这篇文章主要介绍了C语言数据结构 双向链表的建立与基本操作的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C语言之双向链表的相关资料,并附实例代码,有需要的小伙伴可以参考下...2020-04-25
- 本篇文章是对C++中的模版双向链表进行了详细的分析介绍,需要的朋友参考下...2020-04-25
- 这篇文章主要介绍了C++ 实现双向链表的实例的相关资料,需要的朋友可以参考下...2020-04-25
c++双向链表操作示例(创建双向链、双向链表中查找数据、插入数据等)
这篇文章主要介绍了c++双向链表操作示例,包括创建双向链、删除双向链表、双向链表中查找数据、插入数据等,需要的朋友可以参考下...2020-04-25- 本文将详细介绍建立双向链表,实现对双向链表的插入,删除操作,需要了解的朋友可以参考下...2020-04-25
- 本篇文章是对C++中构造双向链表的实现代码进行了详细的分析介绍,需要的朋友参考下...2020-04-25
- 这篇文章主要介绍了C语言实现数据结构双向链表操作,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C语言 数据结构双向链表简单实例的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C++将二叉树转为双向链表及判断两个链表是否相交的方法,文中还给出了求两个链表相交的第一个节点列的实现方法,需要的朋友可以参考下...2020-04-25
- 本文给大家分享的是一段使用C语言实现双向链表的代码,完全是根据自己的理解和认识来编写的,希望大家能够喜欢,文章的最后附上了一个网友写的对于双向链表删除节点、插入节点、双向输出等操作的代码,也非常不错,推荐给大家...2020-04-25
- 这篇文章主要为大家详细介绍了C++数据结构之双向链表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2022-05-26