• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C++实现双向链表(List)

c++ 搞代码 4年前 (2022-01-06) 54次浏览 已收录 0个评论

这篇文章主要为大家详细介绍了C++实现双向链表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

list是C++容器类中的“顺序存储结构”所包含的一种结构。list是非连续存储结构,具有双链表结构,支持前向/后向遍历,且支持高效的随机删除/插入。

实现代码如下:

**list.h**

 #pragma once #include #include #include using namespace std; typedef int DataType; struct ListNode { ListNode* _next; ListNode* _prev; DataType _data; ListNode(DataType x) :_data(x) , _next(NULL) , _prev(NULL) {} };

**test.cpp**

 #define _CRT_SECURE_NO_WARNINGS 1 #include "list.h" class List{ typedef ListNode Node; public: List() :_head(new Node(DataType())){ _head->_next = _head; _head->_prev = _head; } List(const List& l) :_head(new Node(DataType())){ _head->_next = _head; _head->_prev = _head; Node* cur = l._head->_next; while (cur!=l._head){ PushBack(cur->_data); cur = cur->_next; } } List& operator=(const List& l){ if (this != &l){ //swap(_head, l._head); } return *this; } ~List(){ Node* cur = _head->_next; while (cur != _head){ Node* next= cur->_next; delete cur; cur = next; } delete _head; _head = NULL; } void PushBack(DataType x){ Node* prev = _head->_prev; Node* new_node = new Node(x); prev->_next = new_node; new_node->_prev = prev; _head->_prev = new_node; new_node->_next = _head; } void PushFront(DataType x){//插在头结点之后 Node* cur = _head->_next; Node* new_node = new Node(x); new_node->_next = cur; cur->_prev = new_node; new_node->_prev = _head; _head->_next = new_node; } void PopBack(){ Node* delete_node = _head->_prev; Node* cur = delete_node->_prev; _head->_prev = cur; cur->_next = _head; delete delete_node; } void PopFront(){ Node* delete_node = _head->_next; Node* cur = delete_node->_next; _head->_next = cur; cur->_prev = _head; delete delete_node; } Node* Find(DataType x){ Node* to_find = _head->_next; while (to_find != _head){ if (to_find->_data == x){ return to_f<a style="color:transparent">来源gao($daima.com搞@代@#码网</a>ind; } to_find = to_find->_next; } return NULL; } void Insert(Node* pos, DataType x){//在pos位置前插入数据 assert(pos); Node* new_node = new Node(x); Node* prev = pos->_prev; new_node->_next = pos; pos->_prev = new_node; new_node->_prev = prev; prev->_next = new_node; } void Erase(Node* pos){ assert(pos); Node* prev = pos->_prev; Node* next = pos->_next; prev->_next = next; next->_prev = prev; delete pos; } void Print() const{ Node* cur = _head->_next; cout <"; while (cur!= _head){ cout <_data <"; cur = cur->_next; } cout <_prev; while (pos != _head){ cout <_data << "_prev; } cout << "_head" <data:%d[%p]\n",pos->_data,pos); pos = L.Find(2); printf("pos->data:%d[%p]\n", pos->_data, pos); pos = L.Find(4); printf("pos->data:%d[%p]\n", pos->_data, pos); printf("\n"); L.Insert(pos, 3); L.Print(); L.Erase(pos); L.Print(); printf("\n"); List L1; L1.PushFront(4); L1.PushFront(3); L1.PushFront(2); L1.PushFront(1); L1.Print(); L1.PopFront(); L1.Print(); } int main(){ TestList(); return 0; }

以上就是C++实现双向链表(List)的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C++实现双向链表(List)
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址