顺序表算法
① 数据结构与算法———顺序表
By FastHorse March 5, 2017
按顺序方式存储的线性表称为 顺序表(arry - based list) ,又称为 向量(vector) ,通过创建 数组 来建立。顺序表中的每个元素按其顺序有唯一的索引值,又称下标值,可以用来方便地访问元素内容。
只要确定了基地址,线性表中的任意元素的地址都可以方便地计算出来,从而达到随机存取的效果,因此元素间的物理相邻关系表示了他们逻辑上的相邻关系。
下面着重介绍基于数组的顺序表插入、删除运算。
根据位置插入是将指定元素插入到指定位置。除了涉及被更新的那个元素之外,其他的线性关系的相对顺序应保持不变。为此,需要对顺序表实施一系列的元素移动操作来维护逻辑和存储的线性关系。
c++程序实现:
根据大小插入算法适用于数据元素递增的顺序表。从顺序表的第一个元素开始寻找,找到比自己大的元素就插在该元素前面。输入一个数字x,从顺序表的第一个元素开始循环,判断输入的元素是否小于等于顺序表中元素,若成立,则将输入元素插入表中,若不成立,则继续判断顺序表中下一个元素。
c++程序实现:
删除运算需要事先检查顺序表是否为空表,只在非空表是才能进行删除。该算法要求输入一个删除的位置,判断该位置是否有效。若有效,通过左移运算将data[i-1]数组元素删除,从而完成对指定位置元素删除的功能。
c++程序实现:
区域删除算法适用于要在顺序表中删除多个相邻元素。首先输入两个删除的位置,同样通过左移运算将该区域内的所有元素删除。
c++程序实现:
张铭,王腾蛟,赵海燕. 数据结构与算法. 高等教育出版社,2008.6
② 数据结构:设计一个高效算法,将顺序表中的所有元素逆置,要求算法空间复杂度为O(1)。
设计一个高效算法,将顺序表中的所有元素逆置,要求算法空间复杂度为O(1)扫描顺序表L的前半部分元素L.data[i] (0<=i<L.length/2),将其与后半部分的对应元素L.data[L.length-1-i]进行交换即可。
顺序表的存储只要确定了起始位置,表中任一元素的地址都通过下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L 1≤i≤n 其中,L是元素占用存储单元的长度。
(2)顺序表算法扩展阅读:
数据的物理结构是数据结构在计算机中的表示,它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有顺序、链接、索引、散列等多种。
数据元素的机内用二进制位(bit)的位串表示数据元素。当数据元素有若干个数据项组成时,位串中与各个数据项对应的子位串称为数据域(data field)。
③ 顺序表的排序算法
给你举一些比较常用的排序法:
交换排序法
冒泡排序 | 鸡尾酒排序 | 奇偶排序 | 梳排序 | 侏儒排序 | 快速排序 |臭皮匠算法 | Bogo排序
选择排序法
选择排序 | 堆排序 | Smooth排序 | 笛卡尔树排序 | 锦标赛排序 | 循环排序
插入排序法
插入排序 | 希尔排序 | 二叉查找树排序 | 图书馆排序 | Patience排序
归并排序法
归并排序 | 多相归并排序 | Strand排序
分布排序法
美国旗帜排序 | 珠排序 | 桶排序 | 爆炸排序 | 计数排序 | 鸽巢排序 | 相邻图排序 | 基数排序 | 闪电排序
混合排序法
Tim排序 | 内省排序 | Spread排序 | 反移排序 | J排序
其他
双调排序器 | Batcher归并网络 | 两两排序网络
④ 顺序表中元素插入算法详细解释
//将顺序表第i-1个元素至最后一个元素全部向后移动一位
for(j=L->last;j>=i-1;j--)
L->data[j+1]=L->data[j]
//将新元素x插入到原第i-1个元素的位置
L->data[i-1]=x;
//更新顺序表长度
L->last++;
⑤ 在有序顺序存储的线性表中查找一个元素
线性表顺序查找算法分析:
查找与数据的存储有关,线性表{a1,a2,....,an}有顺序和链式两种存储结构.作为顺序表存储时实现顺序查找算法.顺序查找是一种最简单的查找方法.它的基本思路是:从表的一端开始,顺序扫描线性表,依次将扫描到的关键字和给定值k相比较,若当前扫描到的关键字与k值相等,则查找成功;若扫描结束,扔未找到关键字等于k的元素,则查找失败。顺序查找算法(在顺序表R[0..n-1]中查找关键字为k的元素,成功是返回找到的元素的逻辑序号,失败时返回。
首先定义顺序表的类型,再定义一个SeqSearch()函数实现顺序查找.在SeqSearch(SeqListR,intn,KeyTypek)中,其中是在具有n个数据元素R的SeqList中查找值为k的过程.在函数进行运算过程中,首先是通过while判断,当i