课程笔记 07:数据结构(清华) 列表

这篇博客介绍了数据结构中列表的抽象数据类型接口,包括大小查询、节点操作、插入删除、排序查找等功能。还详细讲解了列表类模板的实现,涉及归并排序、选择排序和插入排序等算法,并提供了遍历接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在讨论完了列表的节点类之后,下面就可以考虑列表的接口和实现了。

列表的抽象数据类型的接口如下:

1.报告规模:size()

2.返回首/末节点:first()、last()

3.作为头/尾节点插入:insertAsFirst()、insertAsLast()

4.作为前驱/后继节点插入:insertAsBefore()、insertAsAfter()

5.删除元素:remove()

6.判断有序:disorded()

7.排序操作:sort()

8.无序查找:find()

9.有序查找:search()

10.无序去重:deduplicate()

11.有序去重:uniquify()

12.遍历操作:traverse()

列表类型的具体实现如下:

#include "ListNode.h" //引入列表节点类

template <typename T>

class List //列表类模板

{

private: //私有成员变量

int _size; //定义列表规模

ListNodePosi(T) header, tailer; //头尾哨兵

protected: //保护成员函数

void init(); //初始化

int clear(); //清空

void copyNodes(ListNodePosi(T) p, int n); //复制自节点p开始的n项

void merge(ListNodePosi(T) &, int, List<T> &, ListNodePosi(T) &, int); //归并

void mergeSort(ListNodePosi(T) &, int); //对列表进行归并排序

void selectionSort(ListNodePosi(T), int); //对列表进行选择排序

void insertionSort(ListNodePosi(T), int); //队列表进行插入排序

public:

/*--构造函数--*/

List() { init(); } //默认初始化

List(List<T> const &); //复制初始化

List(ListNodePosi(T) p, int n); //复制自节点p开始的n项

List(List<T>, Rank lo, Rank hi); //复制区间[lo, hi)间的项

/*--析构函数--*/

~List();


/*--只读接口--*/

Rank size() { return _size };

bool empty() { return (_size <= 0) };

T& operator[](Rank r) const;

ListNodePosi(T) & fisrt() const { return header.succ };

ListNodePosi(T) & last() const { return tailer.pred };

bool disorded() const;

ListNodePosi(T) find(T const &);

ListNodePosi(T) find(T const &, ListNodePosi(T), int);

ListNodePosi(T) search(T const &);

ListNodePosi(T) search(T const &, ListNodePosi(T), int);


/*--可写接口--*/

ListNodePosi(T) insertAsFirst(T const &);

ListNodePosi(T) insertAsLast(T const &);

ListNodePosi(T) insertAsBefore(ListNodePosi(T), T const &);

ListNodePosi(T) insertAsAfter(ListNodePosi(T), T const &);

T remove(ListNodePosi(T));

void merge(List<T> &);

void sort();

void sort(ListNodePosi(T), int);

int deduplicate();

int uniquify();


/*--遍历接口--*/

void traverse(void (* )(T &));

template <typename VST>

void traverse(VST &);

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值