C 雙向鍊錶的實現

2021-07-30 19:35:49 字數 1545 閱讀 6073

#include

#include

using namespace std;

typedef int datatype;

// 首先要明白乙個鍊錶的組成,鍊錶又結點連線起來構成,我們定義出乙個結點的結構體,每乙個結點都有自己的next域,pre 域,以及自身的資料。

struct node

node *_next;

node *_pre;

datatype _data;

};// 建立鍊錶結構體的時候,要清楚,乙個鍊錶會有自己的頭指標,尾指標,還有鍊錶的結點數。我們把鍊錶的頭,尾指標都定義為node*型別。

class list

node *_phead;

node *_ptail;

size_t _size;

list(size_t n, const datatype & data = datatype())//明確給出構造n個結點,並且每個結點的值為預設值

:_phead(null)

, _ptail(null)

, _size(0)

*/for (size_t idx = 0; idx < n; idx++)//直接用尾插法建立鍊錶 }

bool empty()const//判斷鍊錶是否為空,因為後面的好多地方都要用到這些**,為了提高**的復用率,直接封裝乙個函式。

void pushback(const datatype &data)

else

_size++;

}void popback(const datatype& data)

else if (_phead=_ptail)//只有乙個結點;

else

--_size;

}void pushfront(const datatype& data)

else

_size++;

}void popfront()

else if (_size == 1)

else

_size--;

}node*find(const datatype &data)

return null;

}size_t size()const

datatype& front()

const datatype& front()const

datatype& back()

const datatype& back()const

void print_list()

}void insert(node* pos, datatype x)

else

else

pcur = pcur->_next;

}cout << "沒有找到這個數字" << endl;}}

}void erase(node* pos)//刪除指定位置的結點  

else

else

else

return;

}del = del->_next;

pre = pre->_next;}}

}}};

雙向鍊錶(C實現)

list.h ifndef list h define list h typedef struct node node typedef struct list list initlist int insertnode list l,void data,int size int deletenode ...

雙向鍊錶(c 實現)

雙向鍊錶與單鏈表有許多的相似之處,但是也有不同之處。雙向鍊錶與單鏈表主要的不同在於 雙向鍊錶可以從兩個方向進行遍歷,但是單鏈表只能從頭節點遍歷到尾節點,不能從尾節點遍歷到頭節點,對於鍊錶中一些插入和刪除等操作,雙向鍊錶較單鏈表更為簡單些。所以,雙向鍊錶有其存在的特殊意義。下面是通過c 來實現雙向鍊錶...

雙向鍊錶 C 實現

雙向鍊錶在類中的實現 include include includeusing namespace std typedef int datatype struct node node pnext node ppre int data class list list const list l else...