輸入、輸出:有窮,確定,可行
以最高端 去除其餘加項,去除係數
//物件:線性表內容
initlist(*l)://建立空線性表l,並進行初始化
clearlist(*l)://清空線性表
listdelete(*l,i,*e)://刪除線性表l第i個元素,並將此元素賦值給e
//需要進行賦值,所以(*e)指向內容
//物件:線性表指標
listempty(l)://判斷線性表l是否為空表,空則返回true,否則返回false
listlength(l)://返回線性表元素個數
getelem(l,i,*e)://把線性表l中第i個元素值賦值給e
//需要進行賦值,所以(*e)指向內容
tips:對線性表進行資料操作的,則操作物件都為指標l指向的內容(*l)
若只是查詢等,不對資料進行改動的,則操作物件都為指標l
//實現順序表的建立、初始化、插入、刪除、修改、普通合併、有序合併
#include
#include
#include
using namespace std;
#define ok 1
#define error 0
#define overflow -2
#define list_init_size 100
#define listincrement 10
typedef
int elemtype;
elemtype *newbase;
//順序表結構描述
typedef
struct
sqlist;
//順序表初始化
intinitsqlist
(sqlist &l)
//建立順序表
void
creatsqlist
(sqlist &l)
}//順序表的顯示
void
showsqlist
(sqlist &l)
//順序表的插入
intinsertsqlist
(sqlist &l,
int pos,elemtype elem)
if(l.length>=l.listsize)
for(
int i=l.length-
1;i>=pos-
1;i--
) l.elem[pos-1]
=elem;
l.length++
;//表長加1
return ok;
}//順序表的刪除
intdeletesqlist
(sqlist &l,
int pos)
for(
int i=pos-
1;i) l.length--
;//表長減1
return ok;
}//修改順序表
intupdatesqlist
(sqlist &l,
int pos,elemtype elem)
l.elem[pos-1]
=elem;
return0;
}//順序表的合併
void
combinesqlist
(sqlist &la,sqlist &lb)
if(cout==0)
la.elem[la.length++
]=lb.elem[i];}
}//順序表的有序合併,有序合併的前提,兩個順序表已經排序好的
void
combinesq
(sqlist &la,sqlist &lb,sqlist &lc)
while
(pa<=pa_last)
*pc++
=*pa++
;//把剩下的逐一插入
while
(pb<=pb_last)
*pc++
=*pb++;}
intmain()
switch
(num)
case2:
case3:
case4:
combinesqlist
(l,lb)
; cout<<
"合併後:"
;showsqlist
(l);
break;}
case5:
combinesq
(l,lb,lc)
; cout<<
"合併後:"
;showsqlist
(lc)
;break;}
}return0;
}
資料結構01 時間複雜度和空間複雜度
什麼是時間複雜度?什麼是空間複雜度?遞迴斐波那契數列優化,尾遞迴優化 迴圈優化 常見時間複雜度 演算法就是計算或解決問題的步驟,用來將輸入資料轉化成輸出結果。演算法效率分析分為兩種 第一種是時間效率,第二種是空間效率。時間效率被稱為時間複雜度,而空間效率被稱作空間複雜度。時間複雜度主要衡量的是乙個演...
01 時間複雜度 空間複雜度
1 時間頻度 乙個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t n n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。2 時間複雜度 若有某個輔助函式f n 使得當n趨近於無窮大時,t n f n 的極限值為不等於零的常數,則稱f n 是t n 的同數量級函式。記作t n f ...
演算法01 時間複雜度
演算法,通俗來說,就是被設計出來用於解決某個或某類問題,具有一定通用性的計算流程和方法。解決某個問題,通常有不止一種演算法。評價乙個演算法的優劣,從3個方面進行考察 時間複雜度 額外空間複雜度 常數項時間 通常用最壞時間複雜度 大寫o 來表示乙個演算法的時間複雜度。通常估計乙個演算法的時間複雜度是這...