成语大全网 - 汉语词典 - C语言:单链表排序 有三个单链表程序 想知道每句运行下的意思(算法)

C语言:单链表排序 有三个单链表程序 想知道每句运行下的意思(算法)

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=1;i<n;i++)/*这个for循环配合23行,让p依次指向链表的第1个节点到倒数第2个节点。

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

11: {

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

13: for(j=i+1;j<=n;j++)/*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。

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