PTA6 1 共享字尾的鍊錶

2021-10-05 08:34:22 字數 1918 閱讀 4768

有一種儲存英文單詞的方法,是把單詞的所有字母串在乙個單鏈表上。為了節省一點空間,如果有兩個單詞有同樣的字尾,就讓它們共享這個字尾。下圖給出了單詞「loading」和「being」的儲存形式。本題要求你找出兩個鍊錶的公共字尾。

函式介面定義

ptrtonode suffix

( list l1, list l2 )

;

其中list結構定義如下:

typedef

struct node *ptrtonode;

struct node

;typedef ptrtonode list;

/* 定義單鏈表型別 */

l1和l2都是給定的帶頭結點的單鏈表。函式suffix應返回l1和l2的公共字尾的起點位置。

裁判測試程式樣例:

#include

#include

typedef

char elementtype;

typedef

struct node *ptrtonode;

struct node

;typedef ptrtonode list;

/* 定義單鏈表型別 */

void

readinput

( list l1, list l2 )

;/* 裁判實現,細節不表 */

void

printsublist

( ptrtonode startp )

;/* 裁判實現,細節不表 */

ptrtonode suffix

( list l1, list l2 )

;int

main()

/* 你的**將被嵌在這裡 */

輸入樣例:

輸出樣例:

ing
看似乙個簡單的比較問題:找到第乙個相等元素且後邊都相等即可,但是指標如何移動呢?

我們注意到它是找公共字尾,所以對於兩個長度不一的單詞來說多餘的那部分是無需參與比較的,所以第一步:移位,計算兩個單詞的長度len1,len2,較長鍊錶指標移動 |len1-len2|次,之後再開始逐位比較;

第二步:比較,定位

ptrtonode suffix

( list l1, list l2 )

while

(p2)

p1=l1->next,p2=l2->next;

//歸位

if(len1>=len2)

else

//移位完成,開始比較

//方法一

list q1,q2;

//第乙個相等的位置用q1,q2標記,比較其後元素

while

(p1)if(

!q1)

return p1;

} p1=p1->next;p2=p2->next;

}return

null

;/*後來參考別人**發現方法一有些複雜,p1,p2既是指標也代表從p1,p2處開始到末尾的鍊錶,完全可以作為乙個整體來比較

方法二:

while(p1 != p2)

return p1;

*/}

6 1 共享字尾的鍊錶 20分

有一種儲存英文單詞的方法,是把單詞的所有字母串在乙個單鏈表上。為了節省一點空間,如果有兩個單詞有同樣的字尾,就讓它們共享這個字尾。下圖給出了單詞 loading 和 being 的儲存形式。本題要求你找出兩個鍊錶的公共字尾。其中list結構定義如下 typedef struct node ptrto...

鍊錶題4 共享字尾

共享字尾的鍊錶 20分 有一種儲存英文單詞的方法,是把單詞的所有字母串在乙個單鏈表上。為了節省一點空間,如果有兩個單詞有同樣的字尾,就讓它們共享這個字尾。下圖給出了單詞 loading 和 being 的儲存形式。本題要求你找出兩個鍊錶的公共字尾。ptrtonode suffix list l1,l...

6 5 共享字尾的鍊錶 20分

有一種儲存英文單詞的方法,是把單詞的所有字母串在乙個單鏈表上。為了節省一點空間,如果有兩個單詞有同樣的字尾,就讓它們共享這個字尾。下圖給出了單詞 loading 和 being 的儲存形式。本題要求你找出兩個鍊錶的公共字尾。函式介面定義 ptrtonode suffix list l1,list l...