单向链表和双向链表区别(单向链表)

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

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

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、 效果

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

标签:

免责声明:本文由用户上传,如有侵权请联系删除!