C++ STL之slist單向鏈表容器使用方式
slist為單向鏈表的泛化容器,與list雙向鏈表容器一樣,實現(xiàn)了線性表數(shù)據(jù)的鏈表存儲,數(shù)據(jù)元素不必在物理內(nèi)存中連續(xù)分布。
slist鏈表的節(jié)點,只有后繼的指針,不含前驅(qū)的指針。因此,在節(jié)省前驅(qū)指針的存儲空間的同時,也就不再支持迭代器的反向移動。
1.slist技術(shù)原理
slist內(nèi)部的鏈表由頭指針、頭節(jié)點和元素節(jié)點組成,每個節(jié)點含有指向后繼節(jié)點的指針,最后一個節(jié)點的指針為null,可見slist沒有形成一個環(huán)形回路。
頭節(jié)點一般不存儲數(shù)據(jù),為了使各個元素節(jié)點都有前驅(qū)節(jié)點的指針指向它以便能夠不加區(qū)別的對第一個元素節(jié)點和其他元素節(jié)點進行統(tǒng)一處理,所以構(gòu)造頭節(jié)點。
2.slist應(yīng)用基礎(chǔ)
list對象的創(chuàng)建和vector一樣,不多解釋。元素的刪除、歸并、排序與list相同。
2.1初始化賦值和遍歷
通常使用push_front函數(shù)進行初始化,由于slist的頭節(jié)點僅有一個指針域保存首元素地址,而沒有存放最后一個元素的地址,因此slist沒有提供類似的push_back函數(shù)能夠在容器尾部添加元素。
push_front函數(shù)在鏈表首元素前面,插入一個新元素,使之成為首元素。
遍歷slist和list一樣,只能使用迭代器進行遍歷,而不能使用數(shù)組下標的形式。
#include <QList> //在qt中QList就是單向鏈表,用法和slist相同 #include <QCoreApplication> #include<QString> using namespace std; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QList<int> s; s.push_front(11); //在首元素插入11 s.push_front(23); //在11前面插入23,即現(xiàn)在23為首元素 s.push_front(39); // 在首元素23之前插入39,即39,23,11 QList<int>::iterator i,iend; iend=s.end(); for(i=s.begin();i!=iend;i++) { cout << *i << " "; } cout << endl; return a.exec(); }
運行結(jié)果:
2.2元素的插入
對于任意位置上的slist鏈表元素的插入,可使用insert_after和insert函數(shù),insert_after函數(shù)直接在指定的pos位置后插入新元素。
insert則從單向鏈表的頭節(jié)點開始,找到pos的前驅(qū)位置,然后調(diào)用insert_after函數(shù)進行插入,因此執(zhí)行效率比較低。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++實現(xiàn)LeetCode(36.驗證數(shù)獨)
這篇文章主要介紹了C++實現(xiàn)LeetCode(36.驗證數(shù)獨),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07Qt 中 isHidden 和 isVisible 的區(qū)別與使用小結(jié)
Qt 中的 isHidden() 和 isVisible() 方法都用于查詢組件顯示或隱藏狀態(tài),然而,它們有很大的區(qū)別,了解它們對于正確操作組件致關(guān)重要,下面給大家介紹Qt 中 isHidden 和 isVisible 的區(qū)別與使用,感興趣的朋友一起看看吧2025-03-03C語言實現(xiàn)訪問及查詢MySQL數(shù)據(jù)庫的方法
這篇文章主要介紹了C語言實現(xiàn)訪問及查詢MySQL數(shù)據(jù)庫的方法,涉及C語言基于libmysql.lib實現(xiàn)訪問MySQL數(shù)據(jù)庫的相關(guān)操作技巧,需要的朋友可以參考下2018-01-01