int a[maxsize];
int n;
//或者這樣寫
typedef struct sqlist
sqlist;
單鏈表
typedef
struct lnode
lnode;
雙鏈表
typedef
struct dlnode
dlnode;
初始化順序表時只需要將長度設定為0便可
順序錶用陣列[m+n]a表示,前m個元素遞增有序,後n個元素遞增有序,設計乙個演算法,使得整個順序表有序。
void insertelem(int a,int m,int n)
}
::時間複雜度為o(mn)::
::空間複雜度為o(1),演算法所需的額外儲存空間與資料規模無關!::
兩個遞增有序的單鏈表a、b,元素個數分別為m和n,都有頭結點。求a-b,結果放在a鍊錶裡面。
void difference (lnode* a,lnode* b)
else
if(p->
data
> q->
data)
else
}}
::時間複雜度為o(m+n)::
為什麼在單迴圈鍊錶中設定尾指標比設定頭指標更好?
::因為可以用它來方便的查詢鍊錶的開始結點和終端結點,查詢時間均為o(1)::
有乙個順序表l,全是整型資料,設計乙個演算法,將l中所有小於表頭元素的整數放在前半部分,大於表頭元素的幀數放在後半部分。
void move (sqlist& l)
while(il.data[i]<=temp)//加乙個等號,結果大不一樣!
i++;
if(il.data[j] = l.data[i];
j--;}}
l.data[i] = temp;
}
有乙個遞增非空鍊錶,設計乙個演算法刪除值重複的結點。
void deletelist(lnode* l)
}q = p->next;
p->next =
null; //將有用部分和重複部分斬斷聯絡
while(q !=
null)
}
設計乙個演算法刪除單鏈表l(有頭結點)中的乙個最小值結點。
void deletemin(lnode *l)
p = p->next;
pre = pre->next;
}minpre->next =
min->next;
free(min);
}
::遍歷鍊錶需要兩指標,刪除一結點需要兩指標,一共需要4指標::
反之,如果要刪除最大的結點呢?::也得要4個指標。::
設計乙個演算法來逆置乙個帶頭結點的單鏈表。
void reverse(lnode *l)
}
設計乙個演算法,逆序列印單鏈表資料。
void reprint(lnode *l)
cout<}
設計乙個演算法,輸出帶頭結點的單鏈表的倒數第k個結點的值。
void kvalue(lnode *l, int k)
if(q = l)
cout<<0;
else
cout
}
mysql 線性表 資料結構之線性表
概要 參考 大話資料結構 把常用的基本資料結構梳理一下。線性表定義 線性表 list 零個或多個資料元素的有限序列。若將線性表記為 a 1,cdots,a a i,a cdots,a n 則表中 a 領先於 a i a i 領先於 a 稱 a 是 a i 的直接前驅元素,a 是 a i 的直接後繼元...
資料結構之線性表
從現在開始,我們開始討論如何實現一些常用的資料結構和其中的一些經典演算法.等把資料結構講完了.我可能會繼續討論vc 的程式設計只是以及vs平台下的c c 開發等等.呵呵.我們進入正題吧.我在這裡就只實現線性表的連表結構.當然了,這裡實際上包含了好多知識.我希望大家在引用的時候.一定要領悟裡面的一些變...
資料結構之線性表
線性表是具有相同特性的資料元素的乙個有限序列。該序列中所含元素的個數叫做線性表的長度,用n表示,n 0。當n 0時,表示線性表是乙個空表,即表中不包含任何元素。設序列中第i i表示位序 個元素為ai 1 i n 線性表的一般表示為 a1,a2,ai,ai 1,an include include d...