演算法設計學習 單鏈表演算法

2021-06-23 00:51:31 字數 1323 閱讀 9767

(1)題目:單鏈表a 和 b (帶表頭結點),元素遞增有序。設計演算法將a 和 b歸併成乙個按照元素值依然遞增有序的鍊錶c,c由a和b的結點組成。

**

typedef struct lnode

lnode;

void mergelinkedlist( lnode *&a, lnode *&b, lnode *&c) //要改變的變數使用引用型

else

}r->next = null; //此句話可以去掉,下面兩個if語句必須有乙個要執行

if ( null != p ) //還有剩餘結點的鍊錶鏈結在尾部

if ( null != q )

}

總結:1)尾插法建立單鏈表;2)單鏈表歸併操作

引申:歸併稱為  遞減的鍊錶c。  (將插入過程改為頭插入法即可)

**:

void mergelinkedlistdescend( lnode *&a, lnode *&b, lnode *&c)

else

}while ( null != p ) //還有剩餘結點的鍊錶逐個插入到c的頭部

while ( null != q )

}

(2)題目:查詢鍊錶c(帶頭結點)中是否存在乙個值為 x 的結點,若存在,則刪除該結點並返回1,否則返回0.

**:

int searchanddelete(lnode *&c, int x)

p = p->next;

} //查詢部分結束

if ( null == p->next )

else

}

附錄:假設有n個元素已經儲存在陣列a中,下面分別是尾插法與頭插法建立鍊錶c

//尾插法

void createlistr(lnode *&c, int a, int n)

r->next = null; //a中的元素全部裝入鍊錶c中,c的終端指標為null

}//頭插法

void createlistf(lnode *&c, int a, int n)

}

//整表刪除

int clearlist(lnode *&c)

c->next = null;

return 1;

}

單鏈表的演算法設計

設計乙個演算法,刪除乙個單鏈表l中元素值最大的結點,題目保證最大值結點是唯一的。解 查詢最大值 用p指標遍歷鍊錶,maxp記錄最大值結點 刪除結點 用maxp記錄最大值的前趨結點,同時再增加pre指標實現maxp和maxpre的同步移動 該演算法的時間複雜度為o n 有乙個帶頭結點的非空單鏈表l,設...

單鏈表演算法

遍歷 就是把單鏈表中的各個節點挨個拿出來,就叫遍歷 遍歷要點 不能遺漏,不能重複,追求效率 方法 從頭指標 頭節點 順著鍊錶掛接指標依次訪問鍊錶的各個節點,取出這個節點的資料,然後再往下乙個節點,知道最後乙個節點,結束返回 include include include 構建乙個鍊錶的節點 stru...

單鏈表演算法

設帶頭結點的非空單鏈表 l,設計乙個演算法刪除 l 中奇數序號 的結點,即刪除 l 中第 1 3 5 結點。應該是對的,唉,我也忘了 設計演算法刪除單鏈表奇數序號的節點 include include include define elemtype int typedef struct node l...