列表—List 底层实现

本文探讨了链表作为动态存储结构的特点,强调其元素通过指针连接,允许高效地进行插入和删除操作。内容包括列表(List)模板类的设计,如默认构造、查找、插入、删除和排序算法(如插入排序、选择排序)等。
摘要由CSDN通过智能技术生成

列表的元素构成一个线性逻辑次序,元素的物理地址可以任意。

链表(linked list)是一种典型的动态存储结构,其中的数据分散为一系列节点单位。节点之间通过指针相互索引和访问。为了引进新节点或删除原有节点,只需在局部,调整少量相关节点之间的指针。这意味着,采用动态存储策略,可以大大降低动态操作的成本。

 

 

列表节点模板类

typedef int Rank;		//秩
#define ListNodePosi<T>	ListNode<T>*	//列表节点位置

template <typename T> struct ListNode {	//列表节点模板类:以双向链表形式实现
//成员
	T data;	ListNodePosi(T) pred;	ListNodePosi(T)	succ;	//数值、前驱、后继
//构造函数
	ListNode() {}	//针对header和trailer的构造
	ListNode( T e, ListNodePosi(T) p = NULL, ListNodePosi s = NULL )
		: data(e), pred(p), succ(s) {}			//默认构造器
//操作接口
	ListNodePosi(T) insertAsPred ( T const& e);	//紧靠当前节点之前插入新节点
	ListNodePosi(T) insertAsSucc ( T const& e);	//紧靠当前节点之后插入新节点
};

 

列表(List)模板类

 

#include "listNode.h"

template <typename T> class List {	//列表模板类
	private:
		int _size; ListNodePosi(T)	header; ListNodePosi(T) trailer;	//规模、头哨兵、尾哨兵
		
	protected:
		void init();	//列表创建时的初始化
		int clear();	//清除所有节点
		void copyNodes ( ListNodePosi(T), int );	//复制列表中自位置p起的n项
		void merge ( ListNodePosi(T)&, int, List<T>&, ListNodePosi(T), int );	//归并
		void mergeSort ( ListNodePosi(T)&, int );		//对从p开始连续的n个节点归并排序
		void selectionSort ( ListNodePosi(T), int );	//对从p开始连续的n个节点选择排序
		void insertionSort ( ListNodePosi(T), int );	//对从p开始连续的n个节点插入排序

	public:
	//构造函数
	List() { init(); }	//默认
	List() { List<T> const& L };	//整体复制列表L
	List() { List<T> const& L, Rank r, int n };	//复制列表L中自第r项起的n项
	List( ListNodePosi(T) p, int n );			//复制列表中自位置p起的n项

	//析构函数
	~List();			//释放所有节点

	//只读访问接口
	Rank size() const { return _size; }	//规模
	bool empty() const { return _size <= 0; }	//判空
	T& operator[] ( Rank r ) const;		//重载,支持循秩访问
	ListNodePosi(T) first() const { return header->succ; }	//首节点位置
	ListNodePosi(T) last() const { return trailer->pred; }  //末节点位置
	bool valid ( ListNodePosi(T) p )	//判断位置p是否对外合法
	{	return p && (trailer != p) && (header != p ); }		/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值