給定一個順序存儲的線性表,請設計一個算法查找該線性表中最長的連續遞增子序列。
例如,(1,9,2,5,7,3,4,6,8,0)中最長的遞增子序列為(3,4,6,8)
/*查找最長連續遞增子序列函數 */
定義整型變量i,j表示循環變量,k用來作找到后新數組下標
定義整型變量 MaxLength=1; //MaxLength為1, 表示長度只有頭部
定義整型 a[maxsize]存放最長連續遞增子序列
for i=0 to L->length
a[i]=1; //表示長度只有頭部
for i=0 to L->length-1
for i=0 to L->length-1
如果 前一個元素 > 后一個元素
a[i]++
否則 break
找到后:
for i=0 to L->length
如果 a[i] > MaxLength,k=i
如果 長度為1,直接輸出此數
如果 長度為0,return
輸出最后結果
end for
本題要求實現一個函數,將給定單向鏈表逆置,即表頭置為表尾,表尾置為表頭。鏈表為帶頭結點鏈表。
(單鏈表基本操作根據老師發的變化。)
/*逆置函數void ReverseList(List &L)調用 */
如果鏈表L 為空表||只有有一個元素
輸出 NULL,不逆置
定義指針p,q ListNode *p,*q移動
令p指向L的第二個數據
while(p)
q 保存下p的值 ,p移動
p的next指向前一個元素
L->next的值不斷變化,循環
end for
先類似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 for
主觀認識:線性表是一種數據結構,能表示出前后相同元素之間的關系,讓元素有規律的排列或組合;
本章小結:
(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中;
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。