博客作业02---线性表
一、PTA實驗作業
題目1:7-1 最長連續遞增子序列
給定一個順序存儲的線性表,請設計一個算法查找該線性表中最長的連續遞增子序列。
例如,(1,9,2,5,7,3,4,6,8,0)中最長的遞增子序列為(3,4,6,8)
1. 設計思路(偽代碼或流程圖)
/*查找最長連續遞增子序列函數 */定義整型變量i,j表示循環變量,k用來作找到后新數組下標定義整型變量 MaxLength=1; //MaxLength為1, 表示長度只有頭部定義整型 a[maxsize]存放最長連續遞增子序列for i=0 to L->lengtha[i]=1; //表示長度只有頭部 for i=0 to L->length-1for i=0 to L->length-1如果 前一個元素 > 后一個元素a[i]++否則 break 找到后: for i=0 to L->length如果 a[i] > MaxLength,k=i如果 長度為1,直接輸出此數如果 長度為0,return輸出最后結果 end for2.代碼截圖
3.PTA提交列表說明
- 編譯錯誤。把PTA中的C改成C++后提交;
- 部分正確。沒有考慮只有一個數時的情況,需要再加上if(MaxLength==1)時,直接輸出這個數;
題目2:6-2 jmu-ds-單鏈表逆置
本題要求實現一個函數,將給定單向鏈表逆置,即表頭置為表尾,表尾置為表頭。鏈表為帶頭結點鏈表。
(單鏈表基本操作根據老師發的變化。)
1. 設計思路(偽代碼或流程圖)
/*逆置函數void ReverseList(List &L)調用 */如果鏈表L 為空表||只有有一個元素 輸出 NULL,不逆置定義指針p,q ListNode *p,*q移動令p指向L的第二個數據while(p)q 保存下p的值 ,p移動 p的next指向前一個元素L->next的值不斷變化,循環end for2.代碼截圖
3.PTA提交列表說明
- 需要考慮空表或僅僅只有有個元素時,不需要逆置;
- 答案錯誤。輸入1 2 3 4 5逆置后輸出4 3 2 1,修改第一個輸出所指結點輸出;
- 部分正確。猜想是逆置函數出錯,注釋掉其他函數,再讀代碼,查找出錯地方,修改:在建模輸入值時循環條件出錯,將for(i=1;i<n;i++)改為for(i=1;i<=n;i++);
- 格式錯誤。輸出函數,最后一個無空格;
題目3:7-3 兩個有序序列的中位數
1. 設計思路(偽代碼或流程圖)
先類似7-1將給出的兩個鏈表S1,S2合并,用鏈表S3裝好 /*查找中位數int Find(LinkList S3, int m,int n)調用*/ m為中位數下標 定義整型變量j=0 表示S3下標定義整型變量length=2*n表示合并后S3長度 定義 LinkList p=S3方便進行移動如果 p為空 return 0當 j<=m 時j遞增p移動直到j==m找到返回找到的下標所指的值end for2.代碼截圖
3.PTA提交列表說明
- 編譯錯誤。忘記把PTA中的C改成C++后提交;
- 段錯誤。之前把合并后的S3先輸出來,函數沒注釋掉,不用輸出,直接輸出中位數的值;
- 答案錯誤。中位數查出錯誤,函數出錯,檢查發現length長度在合并后沒有及時改變,應該變成2n;
二、截圖本周題目集的PTA最后排名
1.順序表PTA排名
2.鏈表PTA排名
3.我的總分:215
三、本周學習總結
1.談談你本周數據結構學習時間是如何安排,對自己安排滿意么,若不滿意,打算做什么改變?
- 課前完成老師布置的預習作業,然后平時上數據結構課程,課后完成相應的PTA練習題;
- 不太滿意。除了老師安排的固定學習外可以自己課下多看數據結構書,看看代碼和解題思路;
- 編程上不懂的地方先上網自己嘗試弄懂,如果不行,請教同學;
2.談談你對線性表的認識?
主觀認識:線性表是一種數據結構,能表示出前后相同元素之間的關系,讓元素有規律的排列或組合;
本章小結:
(1)線性表的定義。線性表是具有相同特性的數據元素的一個有限序列;
(2)線性表的抽象數據類型描述。
ADT List {
數據對象:D={ | ∈ ElemSet, i=1,2,...,n, n≥0 }
數據關系:R1={ <ai-1 ,ai >| ,∈D, i=2,...,n }
基本操作:
{ 結構初始化 InitList( &L ) }
操作結果:構造一個空的線性表 L
{ 銷毀結構 DestroyList( &L ) }
}
(3)線性表的順序存儲結構---順序表及其運用。
包括順序表的建立、初始化線性表、銷毀線性表、判斷是否為空表、求線性表長度、輸出線性表,
還有在線性表中進行某些基本操作運算:如: 求線性表中某個數據元素值、按元素值查找 、插入元素值、 刪除元素值;
(4)線性表的鏈式存儲結構---鏈表,分有單鏈表、雙鏈表和循環鏈表及其運用。
單鏈表中,每個節點有一個指針域,指向其后繼節點,進行操作 時,除了對該節點操作外,還需要考慮其前后的節點;
單鏈表也有順序表里面的基本操作:刪除、插入、建表(頭插法或尾插法,頭插法會逆序輸出)、初始化、銷毀等;
雙鏈表中,每個節點有兩個指針域,一個指向其后繼節點,另一個指向其前驅節點;
建立雙鏈表也有兩種方法:頭插法或尾插法,基本操作跟單鏈表同;
插入節點(如:s插入p后):
s->next=p->next;
p->next->prior=s;
s->prior=p;
p->next=s;
刪除節點(如:刪除p后的節點,得修改兩個指針域):
p->next=q->next;
q->next->prior=p;
(5)循環鏈表,是另一種形式的鏈式存儲結構。
特點:表中尾節點的指針域不再是空,而是指向頭節點,整個鏈表形成一個環,因此,從表中任一個節點出發均可找到鏈表中其他節點;
基本運算:與非循環鏈表基本相同,只對表尾的判斷作了改變,例如,在循環單鏈表或循環雙鏈表L中,判斷表尾節點p的條件是p->next==L;
(6)有序表,指其中所有元素以遞增或遞減方式有序排列的線性表。
有序表的存儲結構及其基本運算:
若以順序表存儲,除插入函數外其余運算基本相同,掃描L,找到插入位置 i,將data[ i ]及后面元素后移一個位置,插入元素e;
若以單鏈表存儲,除插入函數外其余運算基本相同,查找前驅節點pre,創建放e的數據節點p,在pre后插入*p節點;
有序表的歸并。將兩個有序表合并成一個有序表---二路歸并法。
二路歸并法:
分別掃描LA和LB兩個有序表,兩個均未掃描完時,比較LA和LB當前元素,較小的放入LC中,再從較小元素所在的有序表中取下一個元素,重復此過程直到 LA或LB比較完畢,最后將沒有比較完的有序表中余下的元素放入LC中;
3.代碼Git提交記錄截圖
轉載于:https://www.cnblogs.com/78tian/p/8643544.html
總結
以上是生活随笔為你收集整理的博客作业02---线性表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用.reg文件删除暴风影视库图标和注册
- 下一篇: dubbo接口访问控制