如果採用單鏈表儲存單詞,可採用如下辦法壓縮儲存空間。如果兩個單詞的字尾相同,則可以用同乙個儲存空間儲存相同的字尾。例如,原來分別採用單鏈表儲存的單詞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
來標誌當前的字尾一定是最後面的公共字尾,用指標q1
、q2
分別表示單詞公共字尾的位置。修改指標使得單詞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表示...