资讯 更多 >>
单向链表和双向链表区别_单向链表
协商解除劳动合同后用人单位一方反...
天天热消息:杨毅兴奋了!绿军拒绝...
全新第八代宝马5系发布,首次推出纯...
一天近2000套房降价,有人降价20万...
书香深圳“香飘”央视
5月25日 废钢早间行情分析
新消息丨宁波路
英超-福登破门恩西索世界波 曼城1-...
天天微速讯:多中心治理理论的主要...
动态更多 >>
大盘震荡整理,3200点或有反抽
天天精选!东西湖凌晨查获25辆超限...
员工每天带薪拉屎3-6小时被解雇 法...
法雷奥:不打算投资雷诺电动汽车部...
上期所理事长田向阳:加快上市氧化...
打造纯粹的豪华与个性化体验 梅赛...
最强Reno实锤? 数码博主实测Reno1...
快播:ST实华25岁董事长上任 第二...
“数字浙江”创新提质奋力向前(高...
世界热头条丨营养师考试科目及内容_...
美籍酿酒师在崇礼:中国是第二故乡...
河南项城报告2名疑似新冠肺炎病例 ...
浙江绍兴确诊病例首次零新增 上虞...
广西东兴实行全员居家隔离 启动口...
新疆全方位推进乡村振兴 “富春山...
云南瑞丽市主城区全员核酸检测结果...
内蒙古满洲里累计治愈出院本土确诊...
孙海洋夫妻驱车山东阳谷:还在为孙...
大国工匠追梦“玉米强国”40载:用...
让南海“海洋热带雨林”斑斓多彩
专题报道 
当前位置: > 资讯 >
 
单向链表和双向链表区别_单向链表
来源:互联网     时间:2023-05-25 13:23:43

你们好,最近小活发现有诸多的小伙伴们对于单向链表和双向链表区别,单向链表这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。


(相关资料图)

1、首先,定义了链表的数据结构和链表的类。

2、在链表类中构造各种实现方法,如插入、删除、显示、获取头指针等。

3、如果要在链表中节点A之前插入节点B,需要考虑以下几种情况。在插入之前,链表是一个空表。此时,在插入新的节点B之后。如果A是链表的第一个节点,节点B是插入后的第一个节点。如果存在于链表中并且不是第一个节点,

4、那么就要先找到A的最后一个节点a_k,然后让a_k的指针字段指向B,再让B的指针字段指向A,这样就可以完成插入了。如果链表中不存在,则在末尾插入。先找到链表的最后一个节点a_n,然后让a_n的指针字段指向节点B,

5、并且b指针的指针为空。

6、如果要删除链表中的节点A,释放被删除节点占用的存储空间,需要考虑以下几种情况。如果要删除的节点A是第一个节点,将头指向A的下一个节点.要删除的节点A存在于链表中,但它不是第一个节点。

7、那么应该使a的前一个节点a_k-1的指针字段指向a的下一个节点a _ k-1。如果空表或要删除的节点A不存在,则不会进行任何更改。

8、代码:

9、//主函数

10、int main(){StudyList A,B;

11、double Data[10]={12,2,3,44,23,4,23,42,342,8};

12、A.insertList(0,Data[0]);

13、for(int i=1;i10;i++)

14、A.insertList(0,Data[i]);

15、//11

16、A.outputList();

17、A.deleteList(Data[7]);

18、A.outputList();

19、B.insertList(0,Data[0]);

20、for(int i=0;i10;i++)

21、B.insertList(B.getHead()-Data,Data[i]);

22、B.outputList();

23、B.deleteList(55);

24、B.outputList();

25、return 0;

26、}

27、//类库、、、

28、#ifndef STUDYOPERATION_H_

29、#define STUDYOPERATION_H_

30、//学习链表,动态内存分配20150611

31、struct Node

32、{

33、//定义链表的结构

34、double Data;

35、Node *next;

36、};

37、class StudyList

38、{

39、Node *head;

40、public:

41、StudyList();

42、~StudyList();

43、/*double isEmpty();*/

44、void addToHead(double);

45、void addToTail(double);

46、double deleteFromHead();

47、double deleteFromTail();

48、void output list();//链表节点的输出

49、Node *getHead();

50、void insertList(double aData,double bData);

51、void deleteList(double aData);

52、private:

53、};

54、#endif

55、//实现,,,

56、#include "studyOperation.h"

57、#include "main.h"

58、StudyList:StudyList()

59、{

60、head=NULL;

61、}

62、StudyList:~StudyList()

63、{

64、}

65、void StudyList:addToHead(double el)

66、{

67、}

68、Node *StudyList:getHead()

69、{

70、return head;

71、}

72、void StudyList:outputList()

73、{

74、//链表的输出函数

75、Node *current=head;

76、while(current!=NULL)

77、{

78、coutcurrent-Data" ";

79、current=current-next;

80、}

81、coutendl;

82、}

83、Void study list: insert list (double adata, double bData)//Let Adatte be the data in node A and date B be the data in node B.

84、{

85、Node *ptr_a,*ptr_ak,*ptr_b;

86、ptr _ b=(Node *)new(Node);//动态分配一个新节点。

87、ptr_b-Data=bData;

88、ptr_a=head;

89、if(head==NULL)

90、{

91、//如果是空链表,将B作为第一个节点。

92、 cout"空链表!"endl;

93、 head=ptr_b;

94、 ptr_b-next=NULL;

95、}

96、else if(ptr_a-Data==aData)

97、 {

98、 //若a为第一个结点,b插在a之前

99、 ptr_b-next=ptr_a;

100、 head=ptr_b;

101、 }else

102、{

103、while(ptr_a-Data!=aDataptr_a-next!=NULL)

104、{

105、//a存在,但不在第一个结点

106、ptr_ak=ptr_a;

107、ptr_a=ptr_a-next;

108、}

109、if(ptr_a-Data==aData)

110、{

111、//若存在a,将b插在a的前面

112、ptr_ak-next=ptr_b;

113、ptr_b-next=ptr_a;

114、}

115、else

116、{

117、//若没有结点a

118、ptr_a-next=ptr_b;

119、ptr_b-next=NULL;

120、}

121、 }

122、}

123、void StudyList:deleteList(double aData)

124、{

125、Node *ptr_a,*ptr_b;

126、ptr_a=head;

127、if(ptr_a==NULL)//若空

128、return;

129、if(ptr_a-Data==aData)//若是第一个结点

130、{

131、head=ptr_a-next;

132、delete ptr_a;

133、}else

134、{

135、while(ptr_a-Data!=aDataptr_a-next!=NULL)//查找结点a

136、{

137、ptr_b=ptr_a;

138、ptr_a=ptr_a-next;

139、}

140、if(ptr_a-Data==aData)//若有a

141、{

142、ptr_b-next=ptr_a-next;

143、delete ptr_a;

144、}

145、}

146、}

147、效果

以上就是单向链表这篇文章的一些介绍,希望对大家有所帮助。

关键词:

上一条:协商解除劳动合同后用人单位一方反悔 职工坚持离职并获经济补偿 今日要闻 下一条:最后一页