線性表
1.本週學習總結
1.1思惟導圖
1.2.談談你對線性表的認識及學習體會
初學線性表,也感受到數據結構的一大難點,首先是順序表,順序表和數組相似,儲存位置是連續的,可是順序表多了長度length,
麻煩的是順序表的插入和刪除須要移動一大部分數據。有序表就是把數據排好序,有序表能夠用順序表儲存,也能夠用單鏈表儲存。
鏈表有單鏈表和雙鏈表、循環鏈表,鏈表在處理數據的插入和刪除有明顯的便捷。固然,在線性表中,運用了不少算法,然而算法
是一個比較困難的部分,須要花大量時間去理解,纔可以消化。
2.PTA實驗做業
2.1.題目1:
要求實現3個函數,在遞增的順序表中插入一個新整數,並保持該順序表的有序性
2.1.1設計思路(僞代碼)
遍歷順序表,記錄要插入的位置i,將i後面的數據後移,將要插入的數據插入位置i
定義i,j
for i=0 to n-1
if L->data[i]>x //尋找到要插入的位置
break;
end for
for j=n to i //將L的第i項後的後移一位
L->data[j]=L->data[j-1]
L->data[i]=x //將x插入到i的位置
2.1.2代碼截圖
2.1.3本題PTA提交列表說明
Q1:考慮範圍時沒有考慮完整
A1:通過幾回數據輸入驗證,調試好範圍
2.2.題目2:
本題要求實現一個函數,將給定單向鏈表逆置,即表頭置爲表尾,表尾置爲表頭。鏈表爲帶頭結點鏈表。請實現逆轉函數
2.2.1設計思路(僞代碼)
新建一個鏈表,將L鏈表用頭插法讀取到新建的鏈表裏
申請node,head結點
爲newL申請動態空間
讓head爲newL的頭節點;
while L->next //利用頭插法,把L鏈表的值重構到新鏈表裏
讓 node->next 指向 newL->next
讓 newL->next 指向 node
L 指向 L->next;
end while
L=head;
2.2.2代碼截圖
2.2.3本題PTA提交列表說明
Q1:編譯錯誤是L傳參的結構體名錯誤
A1:在編譯軟件改告終構體,忘了pta裏給的是函數,結構體不能改
Q2:後來只有空鏈表能夠過
A2:修改了循環裏鏈的關係
2.3.題目3:
鏈表L是一個有序的帶頭結點鏈表,實現有序鏈表插入刪除操做。
2.3.1設計思路(僞代碼)
插入:遍歷鏈表,以L->next->data與要插入的e做比較,當L->next->data大於e時,
讓e所在的結點指向L->next,L->next指向e所在的結點
刪除:遍歷鏈表,找到L->next->data與要刪除的e做比較,找到後,令L->next指向
L->next->next;
while p->next //以p->next爲判斷的好處的,能夠找到等於e的上個節點
if p->next->data >= e
break
p 指向 p->next
end while
r->next 指向 p->next
p->next 指向 r
2.3.2代碼截圖
2.3.3本題PTA提交列表說明
Q1:鏈表全刪這個點沒考慮到
A1:反覆看題目才發現,看題很重要啊
三、閱讀代碼
3.1 題目
線性表是n個元素的有序集合(n≥0),n是線性表中元素的個數,稱爲線性表的長度。能夠用一組地址連續的存儲單元依次
存儲線性表中元素,採用這種存儲方式的線性表稱爲順序表。請在順序表上實現運算,實現順序表的逆置,刪除表中全部
元素值等於x的元素
輸入
三組數據,順序表元素類型分別爲整型、字符型和實型。
每一組第一行給出元素數目n(0<n≤1000),第二行給出元素數值,第三行給出待刪除的元素。
輸出
三組數據,每一組第一行給出逆置後的順序表元素,第二行是在此基礎上刪除指定元素後的順序表元素,每個輸出元素後
均有一個空格,若是元素所有被刪除,那麼輸出一個空行。
3.2 解題思路
初始化線性表,將數據寫入線性表中,都是運用頭插法,刪除就是遍歷查找相同,找到後改變結點指向
3.3 代碼截圖
3.4 學習體會
寫法上比較簡潔,並且使用標記,這樣使得判斷更加簡單方便,在刪除函數裏,return 返回能夠區別是否有找到要刪除的數
逆置使用的是數組,以爲仍是用鏈表比較節約空間