STL(五) slist list鍊錶

2021-09-28 13:39:31 字數 2951 閱讀 4115

鍊錶是一種資料結構。

鍊錶有乙個「頭指標」變數,以head表示,只要有頭指標就可以得到這條鍊錶的所有資訊。它不儲存資料只存放乙個位址,該位址指向下乙個元素。

鍊錶中每乙個元素稱為「結點」,每個結點都應包括兩個部分:

資料域:使用者需要用的實際資料

head指向第乙個元素,第乙個元素又指向第二個元素;……,直到最後乙個元素,該元素不再指向其它元素,它稱為「表尾」,它的位址部分放乙個「null」(表示「空位址」),鍊錶到此結束,單鏈表示意圖如下:

slist/list是stl對於鍊錶的一種實現。

slist:迭代器屬於單向的forward iterator(可讀寫)。

list :迭代器屬於雙向的bidirectional iterator(可以雙向讀寫)。

看起來slist的功能應該會不如list,但由於其單向鍊錶的實現,其消耗的空間更小,某些操作更快。

這裡重點介紹list,雙向煉表示意圖如下:

1、list的建構函式

lista

list

a(n)

//宣告乙個n個元素的列表,每個元素都是0

list

a(n, m)

//宣告乙個n個元素的列表,每個元素都是m

2、push_back()和push_front()插入乙個元素到list中

push_back():從list的末端插入(尾插)

push_front():從list的頭部插入。(頭插)

呼叫list容器的成員函式begin():得到乙個指向容器起始位置的iterator可以呼叫list容器的end()函式:得到list末端下一位置

3、clear()

清空list中的所有元素

4、front()和back(),pop_back()和pop_front()

front():獲得list容器中的頭部元素

back():獲得list容器的最後乙個元素

pop_back():刪掉尾部第乙個元素

pop_front():刪掉頭部第乙個元素

鍊錶為空時呼叫不會報錯,故最好先呼叫empty()函式判斷。

5、reverse()

可以實現list的逆置

6、insert()

在指定位置插入乙個或多個元素

a.

insert

(a.begin()

,100);

//在a的開始位置(即頭部)插入100

a.insert

(a.begin()

,2,100);

//在a的開始位置插入2個100

7、erase()用迭代器遍歷刪除,執行後it會指向下乙個元素。

list

::iterator it;

for(it = list.

begin()

; it != list.

end();

)

8、實現首尾相連的環形

list l;

list

::iterator it;

for(it = l.

begin()

;;it++

)

hdoj-1276士兵佇列訓練問題problem description某部隊進行新兵佇列訓練,將新兵從一開始按順序依次編號,並排成一行橫隊,訓練的規則如下:從頭開始一至二報數,凡報到二的出列,剩下的向小序號方向靠攏,再從頭開始進行一至三報數,凡報到三的出列,剩下的向小序號方向靠攏,繼續從頭開始進行一至二報數。。。,以後從頭開始輪流進行一至二報數、一至三報數直到剩下的人數不超過三人為止。

input

本題有多個測試資料組,第一行為組數n,接著為n行新兵人數,新兵人數不超過5000。

output

共有n行,分別對應輸入的新兵人數,每行輸出剩下的新兵最初的編號,編號之間有乙個空格。

sample input

2

2040

sample output

1 7 19

1 19 37

#include

.h>

using namespace std;

#define fio ios:

:sync_with_stdio(0

);cin.

tie(0)

;cout.

tie(0)

;int

main()

flag ==

2? flag =

3: flag =2;

//2、3交替輪流進行

}for

(it = l.

begin()

; it != l.

end(

); it++

) cout <<

*it;

} cout <

}}

STL之鍊錶

鍊錶,通過指標來實現。鍊錶是一種資料結構,而list只是stl對於鍊錶的一種實現,一萬個人有可能寫出一萬種不同的鍊錶來。文字內容 很長很詳細的鍊錶所有操作 理解 這篇寫的棧佇列都很好理解 鍊錶是一種常見的重要的資料結構。它是動態地進行儲存分配的一種結構。它可以根據需要開闢記憶體單元。鍊錶有乙個 頭指...

list 鍊錶STL應用

首先要保證標頭檔案必須有,其次建立list,有好幾種方法都可以 include include 這個標頭檔案時list鍊錶所需的 using namespace std int main cout 接下來操作返回首元素值以及返回末值以及排序 以及在有序鍊錶中插入值 include include 這...

STL之鍊錶list(C )

2 鍊錶 list 的常用方法 鍊錶 list 是乙個雙向鍊錶,可高效地進行插入刪除元素。如圖,list的結構 運用 list,必須宣告請標頭檔案 include。list 型別定義於 namespace std 中,是個 class template namespace std第乙個 templa...