算法总结笔记之一——线性表(1)基本实现【C++语言】
2017-04-27 20:48
453 查看
线性表是一种以数组形式来实现的数据结构,先给出抽象定义:
ADT list
insert(x, s) 在s处插入数据x
erase(s) 删除s处的数据
get(s) 读写s处的数据
length() 线性表的长度
clear() 清空线性表
endADT
线性表有两种表示方法:一般数组和面对对象,为了熟悉STL,这里介绍面对对象的方法,先开发类simplelist作为接口:
常量定义:
根据类simplelist, 先开发最简单的arraylist:
首先是线性表的插入操作,将编号为s及以后的数据后移,可是这里数组长度有可能不够,故要先编一个数组变长的函数:
ADT list
insert(x, s) 在s处插入数据x
erase(s) 删除s处的数据
get(s) 读写s处的数据
length() 线性表的长度
clear() 清空线性表
endADT
线性表有两种表示方法:一般数组和面对对象,为了熟悉STL,这里介绍面对对象的方法,先开发类simplelist作为接口:
template <class T> class simplelist { public: virtual void insert(const T& x, const int s) = 0; virtual void erase(const int s) = 0; virtual T& get(const int s) = 0; virtual int length() = 0; virtual void clear() = 0; };
常量定义:
#define UNDERLOW -32768 #define DataUnfound "No such data!"
根据类simplelist, 先开发最简单的arraylist:
template <class T> class arraylist : public simplelist<T> { T* data; int len; public: arraylist(int size = 10) {data = new T[size]; len = 0;} void insert(const T& x, const int s); void erase(const int s); T& get(const int s); int length() {return len;} void clear(); };
首先是线性表的插入操作,将编号为s及以后的数据后移,可是这里数组长度有可能不够,故要先编一个数组变长的函数:
template <class T> void changeLength(T oldData[], int oldsize, int newsize) { T newData[oldsize + 5]; copy(oldData, oldData + oldsize, newData); delete[] oldData; oldData = new T[newsize]; copy(newData, newData + oldsize, oldData); }于是就可以进行插入操作了:
template <class T> void arraylist<T>::insert(const T& x, const int s) { int regsize = sizeof(this->data) / sizeof(T) - 1; if (regsize <= len) changeLength(data, len + 1, len + 2); len++; copy(data + s, data + len, data + s + 1); data[s] = x; }线性表的删除 更是丝毫没有难度 简单一点,代码如下:
template <class T> void arraylist<T>::erase(const int s) { copy(data + s + 1, data + len + 1, data + s); changeLength(data, len + 1, len); len--; }读写线性表中的数据:
template <class T> T& get(const int s) { if (s == 0 || s > len) throw DataUnfound; return this->data[s]; }清空线性表:
template <class T> void arraylist<T>::clear() { delete[] this->data; len = 0; data = new T[10]; }
相关文章推荐
- 数据结构编程笔记十四:第六章 树和二叉树 二叉树基本操作及四种遍历算法的实现
- 线性表增删改的基本算法C实现
- 一.顺序存储结构线性表基本操作实现算法
- Linux运维笔记-文档总结-Apache基本配置的介绍和语言支持,虚拟主机,访问控制的实现
- Memcached 笔记与总结(6)PHP 实现 Memcached 的一致性哈希分布算法
- 算法基础:基本排序算法原理、实现与总结
- 各种基本算法实现总结
- Memcached 笔记与总结(6)PHP 实现 Memcached 的一致性哈希分布算法
- C语言值基本算法43—总结
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- LCA 最近公共祖先——Tarjan(离线)算法的基本思路及其算法实现
- KMP算法基本思想与实现
- Java容器学习笔记(二) Set接口及其实现类的相关知识总结
- JVM调优总结(三)-基本垃圾回收算法
- 算法4-6:关联数组的基本实现
- JVM调优总结(三)-基本垃圾回收算法
- 机器学习基本算法总结4
- JavaScript实现删除数组重复元素的5种常用高效算法总结
- HOG特征提取代码(opencv处理基本数据,c语言实现基本算法)
- 基本算法实现(C)