日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2.3线性表的链式存储和运算—单链表应用举例

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2.3线性表的链式存储和运算—单链表应用举例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

例2.5 已知單鏈表H,寫一算法將其倒置。即實現如圖2.22的操作。(a)為倒置前,(b)為倒置后。


算法思路:依次取原鏈表中的每個結點,將其作為第一個結點插入到新鏈表中去,指針p用來指向當前結點,p為空時結束。

算法如下:

1 void reverse (Linklist H) 2 { 3 LNode *p; 4 p=H->next; /*p指向第一個數據結點*/ 5 H->next=NULL; /*將原鏈表置為空表H*/ 6 while (p) /*p結點不為空,循環*/ 7 { 8 q=p; /*用另一個結點q存儲p結點的信息*/ 9 p=p->next; /*不斷后移*/ 10 q->next=H->next; /*將當前結點插到頭結點的后面*/ 11 H->next=q; /*將頭結點與當前結點相連*/ 12 } 13 }

算法2.15

該算法只是對鏈表中順序掃描一邊即完成了倒置,所以時間性能為O(n)。

例2.6 已知單鏈表L,寫一算法,刪除其重復結點,即實現如圖2.23的操作。(a)為刪除前,(b)為刪除后。

算法思路:用指針p 指向第一個數據結點,從它的后繼結點開始到表的結束,找與其值相同的結點并刪除之;p 指向下一個;依此類推,p 指向最后結點時算法結束。

算法如下:

1 void pur_LinkList(LinkList H) 2 { 3 LNode *p,*q,*r; 4 p=H->next; /*p指向第一個結點*/ 5 if(p==NULL) 6 return; 7 while (p->next) 8 { 9 q=p; 10 while (q->next) /* 從*p的后繼開始找重復結點*/ 11 { 12 if (q->next->data==p->data) 13 { 14 r=q->next; /*找到重復結點,用r指向,刪除*r */ 15 q->next=r->next; 16 free(r); 17 } 18 else 19 q=q->next; 20 } 21 p=p->next; /*p指向下一個,繼續*/ 22 } 23 }

算法2.16

該算法的時間性能為O(n2)。

例2.7 設有兩個單鏈表A、B,其中元素遞增有序,編寫算法將A、B歸并成一個按元素值遞減(允許有相同值)有序的鏈表C,要求用A、B中的原結點形成,不能重新申請結點。

算法思路:利用A、B兩表有序的特點,依次進行比較,將當前值較小者摘下,插入到C表的頭部,得到的C表則為遞減有序的。

算法如下:

1 LinkList merge(LinkList A,LinkList B) 2 /*設A、B均為帶頭結點的單鏈表*/ 3 { 4 LinkList C; 5 LNode *p,*q; 6 p=A->next; /*A的第一個結點*/ 7 q=B->next; /*B的第一個結點*/ 8 C=A; /*C表的頭結點*/ 9 C->next=NULL; /*C表置空*/ 10 free(B); /*釋放B的頭結點*/ 11 while (p&&q) /*p和q結點都存在*/ 12 { 13 if(p->data<q->data) /*從原AB表上摘下較小者*/ 14 { 15 s=p; /*臨時結點s指向p*/ 16 p=p->next; 17 } 18 else 19 { 20 s=q; 21 q=q->next; 22 } 23 s->next=C->next; /*C表的第一個結點賦給結點s的后繼*/ 24 C->next=s; /*將結點s賦給C表頭結點的后繼*/ 25 } 26 if (p==NULL) 27 p=q; 28 while (p) /* 將剩余的結點一個個摘下,插入到C表的頭部*/ 29 { 30 s=p; 31 p=p->next; 32 s->next=C->next; 33 C->next=s; 34 } 35 }

算法2.17

該算法的時間性能為O(m+n)。

轉載于:https://www.cnblogs.com/chunlanse2014/articles/4439661.html

總結

以上是生活随笔為你收集整理的2.3线性表的链式存储和运算—单链表应用举例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。