在程序执行过程中,链表的大小可以变化吗

在程序执行过程中,链表的大小可以变化吗,第1张

链表在程序执行过程中是可以变化的。

以单向链表的增加长度的实现为例:

链表是一个个节点组成的,节点是由节点的内容和下一个节点的地址组成,而且每一个节点都持有这下一个节点的内存地址,

所以在在程序的执行过程中,只需要重新创建一个新节点,然后将当前链表的尾节点持有新生成的节点的地址,这个时候链表的长度就新增一了。所以链表在程序执行期间长度是可变的。

与链表对应的是数组,它们是数据的两种存储方式,数组的大小是在编译器就确定了所需内存大小。

而链表所需的内存地址不是连续的,且可以动态增减长度。

1:Linklist * inserSort(Linklist *L) /*函数参数是一个链表的指针L,返回的也是这个指针,是排序好了的链表。*/

2:{

3: Linklist *p=L->next/*p指向链表第一个节点。*/

4: Linklist *r

5: Linklist *q

6: int i

7: int j

8: int x

9: int n=lengList(L)/*获取链表的节点总个数,存入n。*/

10: for(i=1i<ni++)/*这个for循环配合23行,让p依次指向链表的第1个节点到倒数第2个节点。

这显而易见啊:循环了n-1次,每次都执行23行“p=p->next”。*/

11: {

12: q=p->next/*让q指向p的下一个节点*/

13: for(j=i+1j<=nj++)/*12行、这行的for循环和21行,让q依次指向p之后的节点一直到链表末尾。*/

14: {

15:if(p->data>q->data) /*看p中的数据是否比q中的大*/

16:{

17:x=p->data /*这17,18,19三行是交换pq两节点的数据*/

18:p->data=q->data /**/

19:q->data=x /**/

20:}

21:q=q->next

22: }

23: p=p->next

24: }

25: return L

26:}

以下是上面解释的动态例子:括号中是链表节点的数据,共4个节点,用1234标明。

1(5)->2(8)->3(2)->4(7)

i=1时:p->1(5)

j=2时:

p->1(5),q->2(8),if不成立,q->3(2)

j=3时:

p->1(5),q->3(2),if成立,交换,链表为1(2)->2(8)->3(5)->4(7),q->4(7)

j=4时:

p->1(2),q->4(7),if不成立q->5(null)

i=2时: p->2(8)

j=3时:

p->2(8),q->3(5),if成立,交换,链表为1(2)->2(5)->3(8)->4(7),q->4(7)

j=4时:

p->2(5),q->4(7),if不成立,q->5(null)

i=3时:p->3(8)

j=4时:

p->3(8),q->4(7),if成立,交换,链表为1(2)->2(5)->3(7)->4(8),q->5(null)

至此,排序流程走完,链表从5827排成了2578。

很不好意思,笔者由于重重原因现在仅能完成第一部分,希望能帮上你。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11352296.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存