10單向鍊錶(slist)

2021-10-10 15:12:30 字數 3193 閱讀 8314

1、slist概述

slist並不在標準規格之內,sllist和list的主要差別在於,slist的迭代器屬於單向的forward iterator,而list的迭代器屬於雙向的bidirectional iterator。由於slist沒有任何方便的辦法可以回頭定出前乙個位置,必須從頭找起,所以對於slist除了起點外其他位置採用insert和erase操作都屬於不智之舉,這是slist相較於list的大缺點。為此,slist特別提供了insert_after()和erase_after()供靈活運用。同樣slist不提供push_back()只提供push_front(),因此slist的元素次序會和元素插入進來的次序相反。

2、slist的節點

slist節點和其迭代器的設計,架構上比list複雜許多,運用了繼承關係,因此在性別轉換上有複雜的表現。__slist_node繼承自__slist_node_base,__slist_iterator繼承自__slist_iterator_base。

;2、slist迭代器

};3、slist資料結構

初始化的slist就乙個head節點物件,head沒有data資料成員只有乙個next成員,head.next=0。

template class slist

__stl_unwind(list_node_allocator::deallocate(node));

return node;

} static void destroy_node(list_node* node)

private:

list_node_base head;

public:

slist()

slist(size_type n, const value_type& x)

slist(int n, const value_type& x)

slist(long n, const value_type& x)

explicit slist(size_type n)

template slist(inputiterator first, inputiterator last)

slist(const_iterator first, const_iterator last)

slist(const value_type* first, const value_type* last)

slist(const slist& l)

slist& operator= (const slist& l);

~slist()

public:

iterator begin()

const_iterator begin() const

iterator end()

const_iterator end() const

size_type size() const

size_type max_size() const

bool empty() const

void swap(slist& l)

public:

reference front()

const_reference front() const

void push_front(const value_type& x)

void pop_front()

}

4、slist元素操作

(1)push_front

inline __slist_node_base* __slist_make_link(__slist_node_base* prev_node,

__slist_node_base* new_node)

void push_front(const value_type& x)

(2)pop_front

void pop_front()
(3)erase_after

list_node_base* erase_after(list_node_base* pos)
(4)insert_after

iterator insert_after(iterator pos, const value_type& x) 

list_node* _insert_after(list_node_base* pos, const value_type& x)

inline __slist_node_base* __slist_make_link(__slist_node_base* prev_node,

__slist_node_base* new_node)

鍊錶 反轉單向鍊錶

思路 從第二個元素開始。1 刪除當前元素。2 把當前元素放到頭結點位置。其中需要宣告3個變數 headnode 頭結點 prenode 前乙個結點 currentnode 當前結點 具體步驟如圖所示 實現 反轉單鏈表方法實現類 created by liujinjin on 17 1 19.publ...

鍊錶1 單向鍊錶

鍊錶中最簡單的一種是單向鍊錶,它包含兩個域,乙個資料域和乙個指標域,指標域指向鍊錶中的下乙個節點,最後乙個節點的指標域指向乙個空值 鍊錶最基本的結構是在每個節點儲存資料和到下乙個節點的位址,在最後乙個節點儲存乙個特殊的結束標記,另外在乙個固定的位置儲存指向第乙個節點的指標,有的時候也會同時儲存指向最...

鍊錶 單向鍊錶

討論單鏈表之前,我們先來討論下面這個問題。順序表存在的一些問題 中間 頭部的插入刪除,時間複雜度為o n 增容需要申請新空間,拷貝資料,釋放舊空間。會有不小的消耗。增容一般是呈2倍的增長,勢必會有一定的空間浪費。例如當前容量為100,滿了以後增容到200,我們再繼續插入了5個資料,後面沒有資料插入了...