DS博客做業02--線性表

線性表

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 返回能夠區別是否有找到要刪除的數
逆置使用的是數組,以爲仍是用鏈表比較節約空間
相關文章
相關標籤/搜索