c 實現(list)帶頭結點的雙向鍊錶

2021-08-28 02:43:52 字數 2140 閱讀 1516

vector**:

1.vector資料結構

vector和陣列類似,擁有一段連續的記憶體空間,並且起始位址不變。

因此能高效的進行隨機訪問,時間複雜度為o(1);

但因為記憶體空間是連續的,所以在進行插入和刪除操作時,會造成記憶體塊的拷貝,時間複雜度為o(n)。

另外,當陣列中記憶體空間不夠時,會重新申請一塊記憶體空間並進行記憶體拷貝。

2.list資料結構

list是由雙向鍊錶實現的,因此記憶體空間是不連續的。

只能通過指標訪問資料,所以list的隨機訪問非常沒有效率,時間複雜度為o(n);

但由於鍊錶的特點,能高效地進行插入和刪除。

標頭檔案:

#ifndef __list_h__

#define __list_h__

#includeusing namespace std;

typedef int datatype;

struct listnode

};class list

;#endif

list.h

#include"list.h"

list::list()

:_head(new node(datatype()))

list::list(const list& l)

_head = new node(datatype());

_head->_next = _head;

_head->_prev = _head;

node* cur = l._head->_next;

while(cur != l._head) }

list& list::operator=(const list& l)

return *this;

}list::~list()

node* del = _head;

_head->_prev->_next = null;

node* tmp = del;

while(del != null) }

void list::pushback(datatype x)

node* newnode = new node(x);

node* tail = _head->_prev;//標記尾節點

newnode->_prev = tail;

newnode->_next = _head;

_head->_prev = newnode;

tail->_next = newnode;

}void list::popback()

node* del = _head->_prev;

_head->_prev = del->_prev;

del->_prev->_next = _head;

delete del;

}void list::pushfront(datatype x)

void list::popfront()

node* del = _head->_next;

_head->_next = del->_next;

del->_next->_prev = _head;

delete del;

}void list::insert(node* pos ,datatype x)

if(pos == _head->_prev)

else }

void list::erase(node* pos)

else if(pos == _head->_next)

else if(pos == _head->_prev)

else }

list::node* list::find(datatype x)

node* cur = _head->_next;

while(cur != _head)

cur = cur->_next;

} return null;

}void list::swap(list& l)

void list::show()

cout<

C 實現雙向迴圈鍊錶(帶頭結點)

雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。一般我們都構造雙向迴圈鍊錶。簡單的畫乙個雙向迴圈簡易圖 下面就用c 實現一下基本操作 當然也有 c 語言 版的,只是單鏈表操作...

實現帶頭結點的雙向迴圈鍊錶

dlist.h 帶頭節點的雙向迴圈鍊錶 為什麼要帶頭 原因是因為如果不帶頭的話,那麼頭插或者頭刪會比較麻煩 而且不帶頭的話需要傳遞二級指標,帶頭的話,只需要傳遞一級指標 為什麼給成雙向的?有乙個理由是可以逆向列印鍊錶 也就是對有些操作會簡單一些 pragma once 保證標頭檔案不會被重複包含 i...

帶頭結點帶環的雙向鍊錶的實現

在寫這個 的實現之前我們先來了解下相關的知識。首先,帶頭結點帶環的雙向鍊錶的特點 帶頭節點 建立乙個結點表示空鍊錶,這個節點就是頭結點,並且頭結點中的資料不具有實際的意義。但是我們一般不關心頭結點中的元素,只起 帶頭 作用。雙向要求每個結點中都有乙個next指標指向下乙個,乙個prev指標指向下乙個...