首先,我們先來看看資料結構的定義,資料結構是計算機儲存、組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。資料結構往往同高效的檢索演算法和索引技術有關。
白話來講,資料結構就是儲存資料的房子,對於資料來說,排序查詢都是重要的,那麼選擇什麼樣的資料結構就很重要了,首先有什麼樣的資料結構呢?我們最常用的是陣列,陣列是一大段連續的記憶體空間,
const int length=100;
int *p=new int[length];
for(int i=0;i(cout," "));
delete p;
陣列的優勢是可基於索引的快速遍歷,每乙個索引i的相加,都可以索引到乙個該型別的資料,只是它的插入和刪除都太麻煩了刪除需要把後面的拷貝到前面,而插入則需要重新建立一塊新的更大的記憶體,因此,我們有了vector
#includeusing namespace std;
vectorivec(100);
for(int i=0;i!=ivec.size();++i)
cin>>ivec[i];
sort(ivec.begin(),ivec.end());
copy(ivec.begin(),ivec.end(),ostream_iterator(cout," "));
c++的所有資料結構都做了大量細節,因為乙個類中有建構函式和析構函式,在建構函式中開闢記憶體,在析構函式中刪除記憶體,注意stl生態環境中使用了allocator類來管理記憶體,因此我們省卻了記憶體洩漏的擔憂,不僅如此,stl所有的資料結構類都是由模板構成的,這是一種在編譯時期可以生成**的高效特性,另外c++的stl還提供給我們同樣的使用介面
listilst(100);
foe(list::iterator it=ilst.begin();it!=ilst.end();++it)
ilst.sort();
copy(ilst.begin(),ilst.end(),ostream_iterator(cout," "));
現在,我們看到的是list鍊錶,鍊錶是由資料結構struct構成的
templatestruct node
;
鍊錶的特性是可以快速的插入刪除,但是遍歷的速度卻慢下來因為必須進行指標的迭代,對於乙個網路聊天室這樣總是來人和離開的應用程式呢,鍊錶是最高效的,我們曾經說過,c++的資料結構類都提供了同樣的介面,所謂同樣的介面其實就是提供了相同的函式名只是內部的實現不同罷了,
templateclass clist
; node *_begin;
node *_end;
size _size;
clist(int size):_size(size)
else
node *pcur=_begin,*pfront=pcur;
for(int i=1;i!=_size;++i)
pcur->next=_end;
_end->front=_pcur;
_begin->front=_end;
_end->next=_begin;
}};
上面就是list類,算得上如木三分了吧但不要寫如下**
for(int i=0;inext;
}
STL的資料結構
1.vector 底層資料結構為陣列 支援快速隨機訪問 2.list 底層資料結構為雙向鍊錶,支援快速增刪 3.deque 底層資料結構為乙個 控制器和多個緩衝區,詳細見stl原始碼剖析p146,支援首尾 中間不能 快速增刪,也支援隨機訪問 deque是乙個雙端佇列 double ended que...
資料結構 STL
棧 先入後出 filo 的一種資料結構。常見操作 模擬火車調頭,進製轉換,表示式求值,單調棧 陣列形式 理解 const int num 1e6 10 定義棧的大小,可自由改變 int stac num 乙個整型棧 int top 棧頂指標 int main top 1 設定棧頂指標為 1 stac...
資料結構 stl
uva 11997 題意 給你乙個數k,並且給你k組數,每組k個數,現在在每組中任取乙個數,然後相加可以得到乙個和,這樣的和共有k k個,要求輸出所有可能的和值中最小的k個。思路 問題1 如果只有a,b,c三個大小為k的陣列,我們如何求 和 能獲得最小的前k個和呢?我們只需要將a和b陣列求出前k小的...