数据结构学习笔记 (一)
来源:互联网 发布:如何安装网络机顶盒 编辑:程序博客网 时间:2024/04/30 00:46
线性表
一个线性表是n个数据元素的有限序列。数据元素可以是任何类型的数据。形如 (a1,...,ai-1,ai,ai+1,...,an),ai有且仅有一个直接前驱。线性表每个袁术也都有一个确定的位置,a1为第一个元素,a2为第二个,以此类推。当然当线性表也可以没有元素,此时它就被称为 空表 了。线性表可以进行访问,修改,插入和删除等操作。当然,还可以做一些扩充操作,比如表的合并与拆分等。
线性表的顺序表示和实现
线性表的顺序表示是指用一组地址连续的存储单元依次存储线性表的数据元素。这也就是说这些数据元素在内存中的分布是连续的。线性表的第一个元素的存储位置,通常也称作线性表的起始位置或者基地址。,通常这种线性表也叫做顺序表。只要知道元素的在表中的位置,通过指针可以很容易查找到。通常用数组来表示顺序表。
const int MaxListSize = 100;class List{int data[MaxListSize];int size; //元素的个数public:List(){ size = 0; }; //构造函数~List();void Clear(){ size = 0; }; //清空bool IsEmpty(); //判断是否为空int GetElem(int i); //返回第i个元素int Locate(int e); //返回第一个与e匹配的元素位序int Prior(int e); //返回e的前驱int Next(int e); //返回e的后续void Insert(int e,int i);//在i个位置插入新元素eint Delete(int i); //删除第i个元素,并返回其值int Length(){ return size; };void print(); //输出线性表的元素};
值得注意的是,线性表的总长度是固定的,若要存储的数据超出之前的估计将是一件麻烦的事情。
1.插入操作
void List::Insert(int e, int i){//在顺序表的第i个元素之前插入新的元素e//从数组中下标为i-1的元素后移//i的合法范围为1 <= i <= size+1if (i < 1 || i > size+1 || size >= MaxListSize){cout << "插入不成功" << endl;exit(0);}else{for (int j = size - 1; j >= i - 1; j--){data[j + 1] = data[j];data[i - 1] = e;size++;}}}
假设在线性表任何位置插入数据元素的概率是相同的,则插入一个元素时需要移动的元素的平均次数差不多占表中元素的一半,以上算法的平均时间复杂度为O(n);
2.删除操作
int List::Delete(int i){if (i<1 || i>size){cout << "删除位置不正确" << endl;exit(0);}else{int e = data[i - 1];for (int j = i-1; j < size-1; j++){data[j] = data[j + 1];size--;returne;}}}
算法的平均时间复杂度也是O(n).
3.定位操作
int List::Locate(int e){int i = 1;while (i<=size && data[i-1]!=e){i++;if (i > size) return 0;//没有找到else return i;}}
算法的平均时间复杂度也是O(n).
4.判断线性表是否为空
bool List::IsEmpty(){if (size == 0) return true;else return false;}
5.取元素
int List::GetElem(int i){if (i<1 || i>size){cout << "位置不正确" << endl;exit(0);}else{return data[i - 1];}}
6.输出元素
void List::print(){if (size == 0){cout << "空表,无元素" << endl;exit(0);}else{for (int i = 0; i < size; i++){cout << data[i];cout << endl;}}}
顺序存储结构小结:
优点:
1.无需为表示数据元素间的逻辑关系增加额外的存储空间;
2.可以方便地随机存取表中的任一元素。
缺点:
1.顺序存储结构要求占用连续的存储空间,线性表中元素的最大个数需要预先设定,这个数值不好把握。
2.在进行插入操作和删除操作时需要移动大量的元素。如果表比较大那消耗也是不容乐观的。
0 0
- 数据结构学习笔记(一)
- 学习笔记:数据结构(一)
- 数据结构学习笔记(一)
- 数据结构学习笔记(一)
- 数据结构学习笔记(一)
- 数据结构学习笔记 (一)
- 数据结构学习笔记(一)
- 数据结构学习笔记(一)
- 数据结构学习笔记(一)
- 数据结构学习笔记(一)
- 数据结构学习笔记(一)
- 数据结构学习笔记(一)
- 数据结构学习笔记一
- 数据结构学习笔记(一)
- 数据结构学习笔记一
- 数据结构学习笔记(一)基础知识
- 数据结构学习笔记(一)不断更新
- 数据结构学习笔记(一)---汉诺塔
- 常用SQL语句收藏 <三>
- Linux 下报错:A Java RunTime Environment (JRE) or Java Development Kit (JDK) must解决方案
- C实现两个文件的内容输出到同一个屏幕
- 源码安装openssl
- 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果
- 数据结构学习笔记 (一)
- 获得IOS的版本号
- 有关获取上下文和系统变量
- Android系统中设置TextView的行间距(非行高)
- iOS 打包所遇到的问题:can't link with a main executable file ‘XXX’for architecture armv7
- 用中断实现流水灯
- CA相关缩略语
- HDU 2473 Junk-Mail Filter(并查集 | 删除操作)
- LINK:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏