IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 简单模拟list容器 -> 正文阅读

[数据结构与算法]简单模拟list容器

在这里插入图片描述
本人小白一枚,在这里和大家分享一些编程日常,希望大佬们多多支持!!!??????

容器

容器(Containers):用来管理某类对象的集合。各种数据结构,如vector、list、deque、set、map等,用来存放数据,从实现角度来看,STL容器是一种class template

迭代器

迭代器(Iterators):用来在一个对象集合的元素上进行遍历动作。扮演了容器与算法之间的胶合剂,共有五种类型,从实现角度来看,迭代器是一种将operator* , operator-> , operator++, operator–等指针相关操作予以重载的class template。所有STL容器都附带有自己专属的迭代器,只有容器的设计者才知道如何遍历自己的元素。原生指针(native pointer)也是一种迭代器。

List

List 由双向链表(doubly linked list)实现而成,元素也存放在堆中,每个元素都是放在一块内存中,它的内存空间可以是不连续的,通过指针来进行数据的访问,这个特点使得它的随机存取变得非常没有效率,因此它没有提供 [] 操作符的重载。
但是由于链表的特点,它可以很有效率的支持任意地方的插入和删除操作。
访问开始和最后两个元素最快,其他元素的访问时间一样。
在这里插入图片描述
优缺点和适用场景
优点:内存不连续,动态操作,可在任意位置插入或删除且效率高。
缺点:不支持随机访问。
适用场景:适用于经常进行插入和删除操作并且不经常随机访问的场景。

源代码:

#include<iostream>
using namespace std;
template <class T>
struct Node {
public:
	Node(T data):data(data){}//构造
	Node(T data,Node<T>* next):data(data),next(next){}//构造
	T& getdata() {//获取data
		return data;
	}
	Node<T>* &getnext() {//获取next
		return next;
	}
protected:
	T data;//数据域
	Node<T>* next;//指针域
};
template <class T>
class List {
public:
	List() {//构造
		headNode =tailNode = nullptr;
		cursize = 0;
	}
	~List() {//析构
		Node<T>* pmove = headNode;
		while (!empty()) {
			delete pmove;
		}
	}
	void push_front(T data) {//头插法
			headNode = new Node<T>(data, headNode);
			cursize++;
	}
	void push_back(T data) {//尾插法
		Node<T>* newNode = new Node<T>(data);
		tailNode->getnext() = newNode;
		tailNode = newNode;
		cursize++;
	}
	void pop_front() {//头删除
		Node<T>* tempNode = headNode->getnext();
		delete headNode;
		headNode = tempNode;
		cursize--;
	}
	void pop_back() {//尾删除
		Node<T>* leftNode = headNode;
		Node<T>* rightNode = headNode;
		while (leftNode->getnext()) {
			leftNode = rightNode;
			rightNode = rightNode->getnext();
		}
		delete tailNode;
		tailNode = leftNode;
		tailNode->getnext() = nullptr;
		cursize--;
	}
	int size() {//获取结点数量
		return cursize;
	}
protected:
	Node<T>* headNode;//头节点
	Node<T>* tailNode;//尾结点
	int cursize;//结点数目
public:
	class iterator {//内置迭代器
	public:
		iterator() {//构造
			pmove = nullptr;
		}
		iterator(Node<T>* move):pmove(move){}//构造
		iterator operator=(Node<T>* move) {
			pmove = move;
			return iterator(pmove);
		}
		bool operator!=(Node<T>* move) {//重载!=
			return pmove != move;
		}
		void operator++(int) {//重载++
			pmove = pmove->getnext();
		}
		T operator*() {//重载*
			return pmove->getdata();
		}
	protected:
		Node<T>* pmove;//移动指针
	};
	Node<T>* begin() {//获取头节点
		return headNode;
	}
	Node<T>* end() {//获取尾节点
		return tailNode;
	}
	bool empty() {//判断是否有结点
		return cursize == 0;
	}
};

测试代码:

void test() {
	const int arraySize = 4;
	string Man[arraySize] = { "何美人1号","何美人2号" ,"何美人3号","何美人4号" };
	List<string> list;
	for (int i = 0; i < arraySize; i++) {
		list.push_front(Man[i]);
	}
	List<string>::iterator iter;
	for (iter = list.begin(); iter != list.end(); iter++)
		cout << *iter << endl;
	cout << "......................"<<endl;
	list.pop_front();
	for (iter = list.begin(); iter != list.end(); iter++)
		cout << *iter << endl;
	cout << "......................"<<endl;
	list.pop_back();
	for (iter = list.begin(); iter != list.end(); iter++)
		cout << *iter << endl;
	return 0;
}

运行效果:
在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 11:06:45  更:2021-09-10 11:07:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:23:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码