用C++实现单链表的基本函数以及增删查改
来源:互联网 发布:邓肯季后赛数据 编辑:程序博客网 时间:2024/06/05 08:34
用C++实现双链表的增删查改以及双向链表的逆转
C++实现顺序表基本函数以及增删查改
单链表:
链表中的数据是以节点来表示的,每个结点的构成:元素( 数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
#include<iostream>#include<windows.h>#include<assert.h>using namespace std;typedef int DataType;struct SListNode{ SListNode* _next; DataType _data; SListNode(DataType x) :_data(x) , _next(NULL) {}};class SList{ typedef SListNode Node;public: SList() :_head(NULL) , _tail(NULL) {} SList(const SList& s) :_head(NULL) , _tail(NULL) { Node*cur = s._head; while (cur) { PushBack(cur->_data); cur = cur->_next; } } //l1=l2(传统写法) SList&operator=(const SList &l) { if (this != &l) { this->Destroy(); Node*head = l._head; while (head) { PushBack(head->_data); head = head->_next; } return *this; } } //l1=l2(现代写法) SList&operator=(SList l) { swap(_head, l._head); swap(_tail, l._tail); return *this; } ~SList() { Destroy(); } void Destroy() { Node*cur = _head; while (cur) { Node*next = cur->_next; delete cur; cur = next; } _head = _tail = NULL; } //增删查改 void PushBack(DataType x) { if (_head == NULL) { _head = _tail = new Node(x); } else { _tail->_next = new Node(x); _tail = _tail->_next; } } void PopBack() { if (_head == NULL) { return; } else if (_head->_next == NULL) { delete _head; _head = _tail = NULL; } else { Node* tmp = _head; while (tmp->_next->_next != NULL) { tmp = tmp->_next; } _tail = tmp; tmp->_next = NULL; } } void PushFront(DataType x) { if (_head == NULL) { _head=_tail = new Node(x); } else { Node *tmp = new Node(x); tmp->_next = _head; _head = tmp; } } void PopFront() { if (_head == _tail) { delete _head; _head = _tail = NULL; } else { Node *tmp = _head->_next; delete _head; _head = tmp; } } // 插入一个节点在pos的前面 void Insert(Node* pos, DataType x) { assert(pos); Node*cur = _head; while (cur->_next != pos) { cur = cur->_next; } Node*tmp = new Node(x); cur->_next = tmp; tmp->_next = pos; } Node* Find(DataType x)//查找X { Node*tmp = _head; while (tmp) { if (tmp->_data == x) { return tmp; } tmp = tmp->_next; } return NULL; } void Erase(Node* pos) { assert(pos); if(pos->_next==NULL) { PopBack(); } else { Node*cur = _head; while (cur->_next != pos) { cur = cur->_next; } cur->_next = pos->_next; delete pos; } } void Print() { Node*tmp = _head; while (tmp != NULL) { cout << tmp->_data << " "; tmp = tmp->_next; } cout << endl; }private: Node* _head; Node* _tail;};
阅读全文
1 0
- 用C++实现单链表的基本函数以及增删查改
- C++实现顺序表基本函数以及增删查改
- 【C++】单链表的增删查改实现
- 单链表的增删改查基本操作
- 人事管理系统之基本增删改查的实现以及BaseDao的抽取和封装
- pro*c/c++ 访问数据库,实现基本增删改查
- 基本的增删改查
- thinkPHP项目部署以及基本模型的增删改查
- 单链表的增删改查实现
- JAVA实现单链表的增删改查
- java实现单链表的增删改查
- C语言实现顺序表的增删查改以及排序
- 链表的基本操作的实现---- 增删改查
- Android SQLite的创建以及增删查改的实现
- Hibernate实现最基本的增删改查
- mybits最基本的例子---------实现增删改查
- 存储过程实现基本的增删查改
- 存储过程实现基本的增删查改(二)
- margin
- spring cloud 之 config-server
- 微信公账号支付:签名验证失败的解决办法
- AnimatorSet
- ACM DP Max Sum Plus Plus
- 用C++实现单链表的基本函数以及增删查改
- 解决带有日期格式的txt数据导入oracle报错的问题
- 用PHP做一个小的日历程序
- HDU5521Meeting(最短路建图)
- VPS 面板
- Leetcode 152(Java)
- 二维图像中EMD 法与 Mura 检测的总结
- java并发编程实战-Java内存模型
- NYOJ 题目71 独木舟上的旅行