随笔分类 - 数据结构
摘要:06.从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。 算法思想:注意是有序顺序表,值相同的元素一定在连续的位置上,用类似于直接插入排序的思想,初始时将第一个元素视为非重复的有序表。之后依次判断后面的元素是否与前面非重复有序表的最后一个元素相同,若相同,则继续向后判断,若不同,则插入
阅读全文
摘要:05.从顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错信息并退出运行。 算法思想:从前向后扫描顺序表L,用k记录下元素值在s到t之间元素的个数(初始时k=0)。对于当前扫描的元素,若其值不在s到t之间,则前移k个位置:否则执行k++。由
阅读全文
摘要:04.从有序顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错信息并退出运行。 在很多教材中指的"有序",如无特别说明,通常是指“递增有序”。注意本题与上题的区别,因为是有序表,所以删除的元素必然是相连的整体。 算法思想:先寻找值大干或等于s的第一个元
阅读全文
摘要:03.对长度为n的顺序表L,编写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素。 解法1:用k记录顺序表L中不等于x的元素个数(即需要保存的元素个数),扫描时将不等于x的元素移动到下表k的位置,并更新k值。扫描结束后修改L的长度。 该解法的代码如下: /
阅读全文
摘要:02.设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)。 算法思想:扫描顺序表 L 的前半部分元素,对于元素L.datai,将其与后半部分的对应元素L.data[L.length-i-1]进行交换。 本题代码如下: void Reverse(SqList &L) { Ele
阅读全文
摘要:01.从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。 算法思想:搜索整个顺序表,查找最小值元素并记住其位置,搜索结束后用最后一个元素填补空出的原最小值元素的位置。 本题代码如下: bool Del_Min(S
阅读全文