如果採用單鏈表儲存單詞,可採用如下辦法壓縮儲存空間。如果兩個單詞的字尾相同,則可以用同乙個儲存空間儲存相同的字尾。例如,原來分別採用單鏈表儲存的單詞str1「loading」
和單詞str2「being」
,經過壓縮後的儲存形式如下。
請設計乙個高效的演算法完成兩個單鏈表的壓縮儲存。
要求:閱讀預設**,編寫函式snode * ziplist( snode * head1, snode * head2 )
ziplist的功能是:在兩個串鍊表中,查詢公共字尾,若有公共字尾,則壓縮 並返回指向公共字尾的指標;否則返回null。
前置**:
#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 )
*/
測試輸入
期待輸出
測試用例1
abcdef
dbdef
def
測試用例2
ation
abation
ation
snode *
ziplist
(snode *head1, snode *head2)
while
(m < n)
while
(p1-
>next !=
null
&& p1-
>next-
>data != p2-
>next-
>data)
snode *startp1 = p1;
snode *startp2 = p2;
while
(p1-
>next !=
null
)else
} startp2-
>next = startp1-
>next;
return startp1;
}
三 單詞壓縮儲存
如果採用單鏈表儲存單詞,可採用如下辦法壓縮儲存空間。如果兩個單詞的字尾相同,則可以用同乙個儲存空間儲存相同的字尾。例如,原來分別採用單鏈表儲存的單詞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表示...