結構體和鏈表


結構體

一、PTA實驗作業

題目1:7-2 通訊錄排序

1. 本題PTA提交列表

2. 設計思路

將每個人的信息先錄入到結構體數組中,再將每個人的年齡拿出來比較,可選用選擇排序法將朋友信息重新排序,最后實現按照年齡從大到小輸出朋友的信息。

3.本題調試過程碰到問題及PTA提交列表情況說明

 

錯誤原因:選擇排序法使用錯誤,正確的做法應該是先找出出生日期最小值(即年齡最大)所在的數組下標,再調換位置,而不是直接將數組替換過去。

4.代碼截圖

題目2:7-3 找出總分最高的學生

1. 本題PTA提交列表

2. 設計思路

運用結構體先輸入第一個學生的成績,計算他的總分並將這個學生記做成績最高的學生max。接着依次輸入n-1個學生成績,逐個計算總分並與max所在的學生總分相比,若高於max,將這個學生記做max,直到判斷完成,輸出max所在學生信息。

 

 3.本題調試過程碰到問題及PTA提交列表情況說明

 

錯誤原因:給num數組分配的元素個數太少,把第3行中的5改成10即可調試成功。

 4.代碼截圖

 

題目3:7-4 通訊錄的錄入與顯示

 1. 本題PTA提交列表

 

2. 設計思路

用結構數組輸入朋友的信息。再輸入要查找的記錄編號在數組中查找,若沒有找到,輸出 Not Found ;若找到,輸出對應朋友信息。

3.本題調試過程碰到問題及PTA提交列表情況說明

 

錯誤原因:第15行條件欠缺,該條件成立的判斷是輸入的y值不僅要滿足y>=n還需滿足y<0

調試:將15行改成 if(y>=n||y<0) .

 4.代碼截圖

 

 

二、同學代碼結對互評

 

7-5 復數四則運算

 

1.互評同學名字

羅藝芳

2.我的代碼,同學的代碼截圖

 羅藝芳的代碼:

 

 

我的代碼:

3.我和同學代碼不同在哪里?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪里出問題。

(1).羅藝芳的代碼是將復數四則運算計算完成后按順序一個一個輸出,我是把四則運算符號用數組表示,再用循環計算,依次輸出。

(2).主要的差別是輸出方式不同,還有羅藝芳的代碼有用到結構體,我沒有用到。

(3).我更喜歡我的代碼,更加簡潔明了。

 

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

四、本周學習總結

1.你學會了什么?

(1).用結構struct定義可以把一些數據分量聚合成一個整體的數據類型。

(2).結構變量可以通過結構成員操作符“.”對其某個成員進行引用,結構類型變量的存儲布局按其類型定義中成員的先后順序排列。

(3).一個結構類型變量所占的內存空間是其各個成員所占內存空間之和。

 (4) .(*p).num中的的括號是必不可少的,因為成員運算符“.”的優先級高於“*”的優先級。

2.本周的內容,你還不會什么?

漢諾塔問題還是不太理解。

 

鏈表

一、PTA實驗作業

題目1:7-10 單向鏈表1

1. 本題PTA提交列表

2. 設計思路

首先創建鏈表輸入一組數,再從頭指針head開始判斷是否為奇數值,若是,head=head->next,直到找到一個非奇數值將其定義為頭結點,然后依次判斷后面的數是否為奇數值,若是則刪除,最后將刪除后的鏈表輸出。

 

3.本題調試過程碰到問題及PTA提交列表情況說明

 

出錯原因:沒有注意輸出格式,題目要求最后一個數字后不能有空格,可是我的這種做法末尾有空格。

調試:改正輸出那個位置的代碼,先輸出第一個數字,后面的數字用“空格+數字”的格式輸出。

 

4.代碼截圖

 

題目2:7-12 單向鏈表4

1. 本題PTA提交列表

2. 設計思路

將輸入的第一個非-1的數定義為頭結點,后面依次輸入數字(!=-1),創建鏈表,將每次輸進的數存入原先動態分配給它的一個結構體指針*p,令p->next=head,head=p.這樣可以將輸進的數逆序存進鏈表,最后將鏈表中的數輸出就得到逆序數。

3.本題調試過程碰到問題及PTA提交列表情況說明

4.代碼截圖

題目3:7-13 單向鏈表5

 1. 本題PTA提交列表

2. 設計思路

輸入一組學生信息存進鏈表,再輸入一個成績g,從鏈表的頭結點開始依次往后判斷,若p->grade)<g,則把鏈表中的這個節點刪去,最后將鏈表中所剩的學生信息輸出。

3.本題調試過程碰到問題及PTA提交列表情況說明

 

出錯原因:在這個代碼中我犯了個非常微小的完全不應該犯的錯誤,第34、35行對p->num、p->name賦了值,可是忘記了對p->grade賦值,導致輸出亂碼。

調試:補上“p->grade=grade;”這一語句。

 4.代碼截圖

 

 

二、同學代碼結對互評

7-12 單向鏈表4

1.互評同學名字

雷慧

2.我的代碼,同學的代碼截圖

雷慧的代碼:

 

我的代碼:

3.我和同學代碼不同在哪里?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪里出問題。

(1).雷慧的代碼是將鏈表頭結點定義為空,我所創建的鏈表頭結點非空。

(2).用雷慧的做法可以固定頭結點的位置,我的做法需要通過不斷判斷找出頭結點。

(3).我更喜歡雷慧的代碼,省去判斷頭結點的步驟,更有條理性。

 

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

 

 

四、本周學習總結
1.你學會了什么?

(1).必要時可以用鏈表代替數組進行數據的存儲和操作。這樣有兩個主要優勢:一是不需要事先定義存儲空間的大小,可以實時動態分配,內存使用效率高;二是可以很方便地插入新元素,操作效率高。

(2).sizeof可以判斷所定義變量占據的內存空間。

(3).學會了操作鏈表的增刪改查等。

 

2.本周的內容,你還不會什么?

對於鏈表中指針位置的替換還不太熟練。

3.鏈表考試總結

一開始做鏈表相關的題目時錯誤點非常多,后來改善了些,需要更加注意自己常犯的錯誤並及時改正。

 


免責聲明!

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



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