任何資料結構都對應著儲存結構和邏輯結構,儲存結構分為順序儲存和鏈式儲存,邏輯結構分為陣列(線性表)、樹、圖。
線性表是零個或多個具有相同型別的資料元素的有限序列。線性表的儲存結構同樣分為順序儲存和鏈式儲存,我們要表示或者儲存乙個線性表,必須要連同邏輯結構一並存下來,而陣列就是一種線性表,它的邏輯結構就是「相鄰連續」(實體地址),宣告的時候已經開闢了連續的記憶體單元,在記憶體層面就已經完成了邏輯結構的儲存,它的邏輯結構在構建或是宣告的時候就被儲存下來了。
我們表示空表的方法通常是令表的長度為0,表的長度即是表中元素的個數,這通常是判斷方案可行性的標準。
實現:一維或多維陣列儲存順序表中的元素。
順序表是靜態儲存分配,在順序表變數退出作用域時自動釋放該變數所佔記憶體空間。因此,順序表無需銷毀,析構函式為空。
注意:本class支援模板(泛型)
const int maxsize=100;
template class seqlist
// 析構函式為空
int length ( )
t get ( int i ); // 按位查詢,取線性表的第 i 個元素
int locate ( t x ) ; // 按值查詢,求線性表中值為 x 的元素序號
t delete ( int i ) ; // 刪除線性表的第 i 個元素
void printlist ( ) ; // 遍歷線性表,按序號依次輸出各元素
};template seqlist:: seqlist(t a, int n)
template t seqlist::delete(int i)
template int seqlist::locate(t x)
}
構建單鏈表之尾插法:
template linklist::linklist(datatype a,int n)
}
template linklist::linklist()
只需判斷單鏈表是否只有頭結點,即判斷first->next是否為空
template void linklist::printlist()
}
template int linklist::length()
return cnt;
}
template int linklist::length(int i)
if(p==null) return 0;
else return p->data;
}
template int linklist::length(int x)
return 0;
}
template void linklist::insert(int i,datatype x)
if(p==null) cout<<"wrong";
else
}
template void linklist::insert(int i)
if(p==null) cout<<"wrong";
else
}
template linklist::~linklist()
}
將單鏈表或者雙鏈表的頭尾結點鏈結起來,就是乙個迴圈鍊錶。
不增加額外儲存花銷,卻給不少操作帶來了方便
從迴圈表中任一結點出發,都能訪問到表中其他結點
應用:約瑟夫環,特別是雙端迴圈佇列處理這個問題更加方便。
查詢前驅更加方便
應用:多項式加法,約瑟夫環,鍊錶的逆置
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...