第02次作業-線性表


一、PTA實驗作業

題目一:7-1 最長連續遞增子序列

給定一個順序存儲的線性表,請設計一個算法查找該線性表中最長的連續遞增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最長的遞增子序列為(3,4,6,8)。

1、設計思路

/*求最長遞增子序列*/
定義變量 position 、len 記錄子列的開始位置和長度
定義變量 maxposi 、maxlen 記錄最長遞增子列的位置和長度
while  i < L->length
    do
    if  不為遞增
        then 重新記錄子列初始位置和長度
        else len++
     if  當前長度 > 最大長度
        then maxposi、maxlen  ← position、len
    end
for  0  to  maxlen
    順序表 L ← 最長遞增子列
end 
 L 的長度 ←  maxlen

2、實驗代碼

  • 主函數
  • 求最長遞增子列

3、 遇到問題及解決方法

  • 編譯錯誤:用 c 的編譯器運行 c++ 文件
    解決方法:將上傳選項改為 c++
  • 答案錯誤:隨機最大 n 的測試點過不去
    解決方法:將#define MAXSIZE 100000 改為 #define MAXSIZE 100001 防止數據溢出

題目二:7-3 兩個有序序列的中位數

已知有兩個等長的非降序序列S1, S2, 設計函數求S1與S2並集的中位數。

1、設計思路

  • 1)合並鏈表
  • 2)輸出合並鏈表的第 n 個數 ( n 為單個鏈表的表長 )
/* 鏈表的合並 */
定義指針變量 p1 指向 L1
定義指針變量 p2 指向 L2
while p1 不空 and p2 不空
    do  
    if ( p1->data ≤ p2->data )
        then L ← p1
        else  L ← p2
    end
L ← 剩余的 L1 or L2 

2、實驗代碼

  • 主函數
  • 鏈表合並
  • 求中位數

3、 遇到問題及解決方法

  • 運行超時:多寫了對單個子列的排序函數
    解決方法:子列本為非降序,無需排序
  • 編譯錯誤:函數的聲明放在了結構體之前,導致 List 未定義
    解決方法:將函數聲明置於結構體定義之后

題目三:7-2 一元多項式的乘法與加法運算

設計函數分別求兩個一元多項式的乘積與和。

1、設計思路

/*多項式加法*/
定義結構體指針 ha hb 分別指向 鏈表 a b
定義結構體指針 c 用於存儲新鏈表
定義整型變量 temp 用於判斷系數是否為零
while a不空 and b不空
    do
    if  ha->index ≠ hb->index 
        then 按順序存入新鏈表 
        else  合並同類項
    end
if a不為空 or b 不為空
    then c ← 剩余結點 
返回 c
/*多項式乘法*/
定義結構體指針 ha hb 分別指向 鏈表 a b
定義結構體指針 c 用於存儲新鏈表
定義 tmpC 暫存 乘法運算結果  
if a空 or b空
    then 返回空的 c 
while  ha
    do 遍歷乘以 b 中元素
    end
調用加法函數,進行合並同類項,並將結果賦於 c
返回 c

2、實驗代碼

  • 主函數
  • 多項式加法

  • 多項式乘法

3、 遇到問題及解決方法

  • 答案錯誤:沒有考慮同類項合並問題
    解決方法:增加了指數相同,系數相加的代碼行
  • 段錯誤:在 if ( p ->coeff > p->next->coeff ) 時沒有判斷 p->next 是否存在
    解決方法:將循環條件 while ( p ) 改為 while ( p->next )
  • 答案錯誤:系數為零時不輸出
    解決方法:判斷系數非零時才加入新鏈表中

二、截圖本周題目集的PTA最后排名

- 1.順序表PTA排名

- 2.鏈表PTA排名

- 3.我的總分:2.5

2.5分(必做題全部做完,選做題做部分 )

本周學習總結

1、數據結構的學習時間和自我感覺

  • 本周數據結構學習時間:對於數據結構的學習時間基本都花在打 PTA 上 ,PTA 的內容有很多不懂,花了很多時間。
  • 對自己的安排不滿意,覺得這樣效率不高,但是 PTA 又要完成,有點趕鴨子上架的感覺。
  • 對於不懂的問題,一般問同學或者是百度。
  • 應該做出的改變:先鞏固基本知識,再來做實際編程。

2、對線性表的認識

  • 順序表 & 優點: 對數據的訪問方便,無需未表示表中元素邏輯關系而占用內存
    缺點:插入和刪除元素需要大量移動元素 ; 無法充分利用零碎空間,容易造成空間浪費
  • 鏈表 & 優點:在插入、刪除元素時只需要對單個結點進行操作,不需移動元素
    缺點:在訪問數據時需要遍歷,存儲密度較小

3.代碼Git提交記錄截圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM