三 單詞壓縮儲存

2021-10-08 03:27:35 字數 2308 閱讀 9910

如果採用單鏈表儲存單詞,可採用如下辦法壓縮儲存空間。如果兩個單詞的字尾相同,則可以用同乙個儲存空間儲存相同的字尾。例如,原來分別採用單鏈表儲存的單詞str1「loading」和單詞str2「being」,經過壓縮後的儲存形式如下。

請設計乙個高效的演算法完成兩個單鏈表的壓縮儲存。

要求:閱讀預設**,編寫函式snode * ziplist( snode * head1, snode * head2 )

ziplist的功能是:在兩個串鍊表中,查詢公共字尾,若有公共字尾,則壓縮 並返回指向公共字尾的指標;否則返回null。

說明:本題目有預設**,只要提交你編寫的函式即可。

預設**:

/* preset code begin - never touch code below */

#include

#include

typedef

struct sdata

snode;

void

setlink

( snode *

,char*)

,outlink

( snode *);

intlistlen

( snode *);

snode *

ziplist

( snode *

, snode *);

snode *

findlist

( snode *

, snode *);

intmain()

void

setlink

( snode *head,

char

*str )

return;}

void

outlink

( snode * head )

printf

("\n");

return;}

intlistlen

( snode * head )

return len;

}snode *

findlist

( snode * head1, snode * head2 )

while

( m < n )

while

( p1->next !=

null

&& p1->next != p2->next )

return p1->next;

}/* here is waiting for you! */

/* snode * ziplist( snode * head1, snode * head2 )

*//* preset code end - never touch code above */

測試輸入

期待的輸出

時間限制

記憶體限制

額外程序

測試用例 1

abcdef

dbdef

def1秒

64m0

測試用例 3

ation

abation

ation

1秒64m

0我們需要編寫的ziplist函式的功能已經為我們描述好了:在兩個串鍊表中,查詢公共字尾,若有公共字尾,則壓縮並返回指向公共字尾的指標;否則返回null。

而查詢公共字首的操作在findlist函式中已經提示了,我們可以直接借鑑,需要處理的是壓縮公共字首並返回其指標。

用乙個flag來標誌當前的字尾一定是最後面的公共字尾,用指標q1q2分別表示單詞公共字尾的位置。修改指標使得單詞2的字尾指標指向單詞1的字尾指標,即實現壓縮。

snode *

ziplist

( snode * head1, snode * head2 )

while

(mint flag=1;

snode *q1=

null

,*q2=

null

;while

(p1->next !=

null)}

else

p1=p1->next;

p2=p2->next;}if

(q1 ==

null

)//沒有相同字尾

else

}

單詞壓縮儲存

如果採用單鏈表儲存單詞,可採用如下辦法壓縮儲存空間。如果兩個單詞的字尾相同,則可以用同乙個儲存空間儲存相同的字尾。例如,原來分別採用單鏈表儲存的單詞str1 loading 和單詞str2 being 經過壓縮後的儲存形式如下。請設計乙個高效的演算法完成兩個單鏈表的壓縮儲存。要求 閱讀預設 編寫函式...

單詞的壓縮編碼

1 描述820 給定乙個單詞列表,我們將這個列表編碼成乙個索引字串 s 與乙個索引列表 a。例如,如果這個列表是 time me bell 我們就可以將其表示為 s time bell 和 indexes 0,2,5 對於每乙個索引,我們可以通過從字串 s 中索引的位置開始讀取字串,直到 結束,來恢...

矩陣壓縮儲存

在c中矩陣的表示是用二維陣列。那麼首先要搞清楚陣列行列與矩陣行列的對應。在c語言中二維陣列是按行儲存的。即順序儲存每一行。第一行,第二行。最後一行 看一下例子 陣列數量替換成arrs i j 方便說明。int arrs i j test 二維陣列記憶體位置 for i 0 i 3 i 在上例中i表示...