DS部落格作業02 線性表

2022-05-17 18:22:26 字數 2845 閱讀 3151

線性表中的順序表其實還挺好理解的,和陣列的差距不大,鍊錶就比較抽象了,本來插入感覺挺簡單的,鍊錶那麼一弄,還得先斷鏈,然後接上去要插的這種操作,不過這也有好處,只要對插入的位置進行操作就可以了,不像以前陣列還得把後面的陣列往後移。鍊錶好用是好用,不過抽象的東西挺多的。鍊錶的頭插法和尾插法在很多題目中都用得到。有序表比較好處理。

本題要求:從順序表中刪除重複的元素,並使剩餘元素間的相對次序儲存不變。

定義k來判斷data[i]之前有沒有出現過這個數字,如果沒出現過讓l->data【j】記住l->data【i】,j++;然後最後把j+1賦給l的長度,只輸出到j+1;後面的資料不輸出。

###void createsqlist(list &l,int a,int n)

定義鍊錶l並動態申請記憶體。

然後用for迴圈將a[i]的值賦給l->data[i]

###void delsamenode(list &l)

for迴圈遍歷鍊錶並且在for迴圈裡面有

while(k<=j&&l->data[k]!=l->data[i])   //不斷比較前面是否有與l->data[i]重複的元素

k++;      k是用來判斷是否出現重複數字

if(k>j) l->data[++j]=l->data[i];   如果此時的data[i]不為重複數字,k將小於j

最後將j+1賦給l的長度

###void dispsqlist(list l)

判斷鍊錶非空時輸出鍊錶,

for(i=0;ilength;i++)

當i沒有讀到鍊錶尾端時輸入資料和乙個空格,讀到尾端時不輸出空格。

如果鍊錶為空,return。

•q1:一開始把全部**都貼上進去了,然後編譯錯誤。

•a1:後面發現了,改了之後變成了部分正確。

•q2:還是部分正確,發現空表時不正確。

•a2:添了判斷條件if(l->length==0)  return;的條件還是部分正確,輸出部分和別的同學也一樣,就是不對。

求出兩個有序序列合併後的中位數

首先依次比較data1和data2陣列各個資料的大小,誰小誰的下標+1,然後運用flag變數來判斷當n讀到兩鍊錶長度的一半時這時第n個數是data1還是data2陣列裡的,然後輸出l->data1[i-1]或l->data2[j-1]。

###void createlist(sqlist &l,int n)

給鏈l申請動態空間

兩個for迴圈輸入兩個有序表的資料

###int seek(sqlist &l,int n)     //尋找中位數

定義i,j來比較兩有序表中的數,定義k代表讀到第k數了。

定義中間變數flag=0,flag作為中間變數判斷中位數是data1中的數還是data2中的數

while(k!=n)      當讀到第n+1個數時跳出迴圈

}if判斷 (如果flag=0),

則第n個數是data1的資料,

否則為data2的資料

return 返回l->data1[i-1]或l->data2[j-1]  因為讀到了第n+1個數,比如說n=5,這時讀到了data1[5]是第六個數,所以應該為i-1

###void destroylist(sqlist &l)

delete l;    銷毀表

•q1: 一開始用直接返回的是data1[i]和data2[j]沒考慮到已經讀到了第n+1個數

•a1: 後面通過除錯發現每次輸出的都是後乙個數,然後就想到用i-1和j-1;

•q2: 一開始只對了乙個測試點,有什麼最小n啊奇數序列什麼的沒過。

•a2: 後面看了**之後想到因為我的k是從0開始的,如果遞增到n的話就是n+1個數了

將乙個鍊錶的表頭置為表尾,表尾置為表頭,即倒過來輸出鍊錶

運用頭插法從第二個開始將鍊錶逆置,插入表頭,重複插入。直到表頭置為表尾。

首先定義結構體指標p,temp。

然後將p指向表頭 p=l->next。

將p置為空 p=l->next。

當p非空時 while(p非空)

臨時變數temp儲存p,

將p後移的同時將temp接到表頭,

l->next=temp。

鍊錶逆置完成。

•q1 : 後面好像有忘了l->next=temp這步的操作了,就還是帶著以前的思維寫作業。

•a1 : 還是多虧了老師的**。

•q2 :一開始不太懂temp應該怎麼做才能實現鍊錶逆置,不太懂尾插法的使用

•a2 : 後面鑽研了書上的**和我拍的老師上課的**做出來了

DS部落格作業02 線性表

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

DS部落格作業02 線性表

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

DS部落格作業02 線性表

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