#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...