DS部落格作業02 線性表

2022-05-17 18:18:43 字數 2074 閱讀 5989

線性表的很多操作都有多種實現方法,在這些操作方法之間我們要盡量選擇一種最優的方法,這就對個人的思維能力有一定要求。而在對線性表進行操作時,有一些細節也要特別注意,比如說鍊錶中指標域的指向,我在對鍊錶進行操作時就經常忽略指標的指向已經改變而導致出錯。
相加:等同於兩個有序鍊錶合併,只有在兩個指數相同的節點需要特別處理

相乘:取第乙個多項式的乙個節點,與另乙個多項式的所有節點相乘,用臨時鍊錶儲存相乘後的結果,再把所有的臨時鍊錶合併

void addlist(linklist &add, linklist l1, linklist l2)//相加

void multiplylist(linklist &mulitiply, linklist l1, linklist l2)//相乘

本題我最開始是用陣列來做的,後來才改成用鍊錶來做的,雖然陣列解法會造成時間和空間的浪費,但陣列解法相較於鍊錶解法來說對程式設計師相對友好,寫和除錯會相對比較容易(我陣列解法**60多行,鍊錶解法160多行且除錯的時候修bug修到心累)

(修bug這種事,其實就是電腦難受,但它不告訴你那裡難受,你必須自己找出它**難受,還必須判斷它為什麼難受,最後再對症下藥--乙個修bug修到心累的碼農的真實體會)

遍歷原鍊錶,遍歷的同時取原鍊錶的節點,用頭插法建立新鍊錶

void reverselist(linklist &l)//逆轉鍊錶

本題我也用了兩種解法來做,但其實兩種解法在本質上並無差別,原解法我是取原鍊錶的值來建立新鍊錶的,而新解法我是直接用原鍊錶的節點來建立新鍊錶

其實鍊錶的插入刪除算是基礎操作了,只不過要特別注意一下操作的位置

void listinsert(linklist &l, elemtype e)//有序鍊錶插入元素e

void listdelete(linklist &l, elemtype e)//鍊錶刪除元素e

(其實本來這道題我是打算選有序鍊錶合併的,但有序鍊錶合併的方法我在多項式那一題其實已經講得差不多了,只好選擇這一題了)

請判斷乙個鍊錶是否為回文鍊錶。

示例 1:

輸入: 1->2

輸出: false

示例 2:

輸入: 1->2->2->1

輸出: true

用快慢指標法找到鍊錶的中間節點,之後逆轉鍊錶的後半部分,最後再比較鍊錶的前半部分與後半部分是否相同

(我的思路是複製乙個原鍊錶並將其逆置,之後再與原鍊錶進行比較是否相同)

時常去逛一逛這些**對自己的程式設計能力提公升還是很有幫助的,特別是看一堆大佬在討論如何更快的解決題目,對比自己的解法與他們的解法的優劣,學習優秀的解法以提高自己的程式設計能力,又因為別人解題所用的語言不只一種,我們還可以順便學習一下其他語言。

DS部落格作業02 線性表

方法,還有迴圈鍊錶和雙鏈表的建立,學習了這幾種鍊錶,在今後的使用鍊錶中有了更多的選擇,同時也提高了解部分題目的效率。在順序表這一方面,主要學習的是對順序表的插入和刪除操作,鍊錶也同樣是插入和刪除,再加上擴充套件的一些操作。這兩種線性表各有 其優缺點,在使用時還需要分情況考慮。插入函式listinse...

DS部落格作業02 線性表

這階段學習學的是線性表,學習線性表的兩種儲存順序 鍊錶和順序表,體會了兩者儲存結構之間的區別,通過對順序表,單鏈表,雙鏈表,迴圈鍊錶,有序表的特點的了解,和學習它們的演算法設計方法,綜合運用線性表解決一些問題,在查資料時,也領悟一點單雙鏈表的在一些方面使用的優劣,對線性表的知識更加加深一點。void...

DS部落格作業02 線性表

1.2談談你對線性表的認識及學習體會 1 線性表是一種典型的線性結構,也是一種最常用的資料結構。線性表包括順序儲存結構和來鏈式儲存結構兩種,其中鏈式儲存結構的鍊錶正是上學期學過一點,在運用上的話,原理是懂了,但是運用起來還是 有點欠佳。剛開始做對鍊錶的一些操作方法有點不清楚,還有就是這學期涉及到時間...