算法-顺序表合集
对长度为n的顺序表L,编写一个时间复杂度为 O(n)、空间复杂度为 O(1)的算法,该算法删除顺序表中所有值为x的数据元素。
时间复杂度为 o(n^2)的暴力算法,即两个for循环。
记录不等于x的元素的个数
相比较与粘图片,还是使用福昕pdf复制,我觉得还是手打吧,因为我实在是看不上前两种方式
法一:记录不等于x的个数,直接替换
1 | void del(SeList *L,Element x){ |
法二:记录等于x的个数,整体移位
1 | void del(SeList *L,Element x){ |
法三:双指针法
变种
- 从顺序表中删除其值在给定值s和t之间(包含s和t,要求s小于t)的所有元素,若s或t不合理或顺序表为空,则显示出错信息并退出运行。
合并有序表为一个新的有序表,并由函数返回
1 | bool Merge(SqList *a,SqList *b ,SqList *c){ |
如图
思路:先对m+n整体逆转,在对其分别逆转。
1 | bool Reverse(SqList *L,int left,int right,int arraySize){ |
1 | bool Exchange(SqList *L,int left,int right,int arraySize){ |
变种
从三个顺序表中找出相同元素
1 | void sameKey(int a[],int b[],int c[],int n){ |
时间复杂度,o(n)
空间复杂度,o(1)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 陈同学的桃花源!
评论