
顺序表
顺序表
Rachel-0110
一个小白程序媛的碎碎念(尽管出走半生,归来仍是小白)
基本都是学习时的一些小笔记,语言比较“稚嫩”,如有错误敬请指正,感谢!
展开
-
2.2.10 【2010统考真题】设将n(n>1)个整数存放到一维数组R中。
【2010统考真题】设将n(n>1)个整数存放到一维数组R中。设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据由(X0,X1…Xn-1)变换为(Xp,Xp+1…Xn-1,X0,…Xp-1)。要求:1)给出算法的基本设计思想。2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。3)说明你所设计算法的时间复杂度和空间复杂度。算法思路:主要的思路和2.2.8差不多都是先分段逆置再整体逆置的办法实现。原创 2022-03-31 20:57:36 · 5133 阅读 · 5 评论 -
2.2.9 线性表(a1,a2,···,an)中的元素递增有序且按顺序存储于计算机内。要求设计一个算法,完成用最少时间在表中查找数值为x的元素
线性表(a1,a2,···,an)中的元素递增有序且按顺序存储于计算机内。要求设计一个算法,完成用最少时间在表中查找数值为x的元素,若找到,则将其与后继元素位置相交换,若找不到,则将其插入表中并使表中元素仍递增有序。思路:因为题目要求用最少的时间,所以考虑二分查找。int Search(SeqList& L, int x, int low, int high) { int t; int min; while (low < high) { mid = (low + high)原创 2022-03-30 19:42:44 · 1456 阅读 · 0 评论 -
2.2.8 已知在一维数组A[m + n]中依次存放两个线性表(a1, a2, a3, a4....am)与(b1, b2, b3...bn)。试写函数将两顺序表的位置互换
已知在一维数组A[m + n]中依次存放两个线性表(a1, a2, a3, a4…am)与(b1, b2, b3…bn)。试写函数将两顺序表的位置互换,即将(b1, b2, b3…bn)放在(a1, a2, a3, a4…am)前面思路1:既然是数组,我想的是把数组元素对换,比如:A[0](a1)与A[m](b1)对换,但这样就要考虑一对一对调之后就会有元素剩下的情况思路2:把bn元素一个个插到a1前面,这样太麻烦了思路3(参考算法思想):void Reverse(DataType A[],in原创 2022-03-30 18:47:15 · 2029 阅读 · 6 评论 -
2.2.7 将两个有序顺序表合并为一个新的有序顺序表,并由函数返回合并后的顺序表
将两个有序顺序表合并为一个新的有序顺序表,并由函数返回合并后的顺序表思路1:遍历两个顺序表L0,L1,把L1中的元素依次插入到L0中。(插入每次都要把后面的元素后移,时间复杂度高)思路2:同时遍历两个元素并比较,依次存放到第三个顺序表L2中。...原创 2022-03-29 21:08:35 · 941 阅读 · 0 评论 -
2.2.5 从顺序表中删除其值在给定值s与t之间(包含s和t,要求s小于t)的所有元素,如果s或t不合理或顺序表为空,则显示出错信息并退出运行
从顺序表中删除其值在给定值s与t之间(包含s和t,要求s小于t)的所有元素,如果s或t不合理或顺序表为空,则显示出错信息并退出运行这题跟前两题很像,上一题我“误打误撞”的那个思路就刚好适用这题void DelST(Sqlist& L, Elemtype s, Elemttype t) { int j = 0; if (s < t) { for (int i = 0; i < L.length; i++) { if (L.data[i] > s &&原创 2022-03-27 20:23:09 · 399 阅读 · 0 评论 -
2.2.4 从有序顺序表中删除其值在给定值s与t之间(要求s<t) 的所有元素。若s或t不合理,或顺序表为空,则显示出错误信息并退出运行
从有序顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t) 的所有元素。若s或t不合理,或顺序表为空,则显示出错误信息并退出运行思想:删除s到t之间的元素void DelST(Sqlist& L, Elemtype s, Elemttype t) { int j = 0; if (s < t) { for (int i = 0; i < L.length; i++) { if (L.data[i] > s && L.data[i] &原创 2022-03-27 20:13:24 · 1049 阅读 · 0 评论 -
2.2.3 对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素
对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素算法思想:按值查找到值为x的数据元素后将后面的元素前移(用两个循环,这样的问题是时间复杂度高了!)void DelX(Sqlist& L) { for (int i = 0; i < n; i++) { if (L.data[i] == x) { for (int j = i; j < n; j++) { L.data[j] = L.data[j原创 2022-03-25 20:38:14 · 443 阅读 · 0 评论 -
2.2.2 设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)
设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)我理解的最简单的算法是遍历顺序表的元素逆置放在新顺序表中,不过这样可能空间复杂度高一点(私心总觉得在原顺序表中操作比较麻烦QAQ)void Reverse(SqList& L, SqList& R) { int j = L.length - 1; for (int i = 0; i < L.length; i++) { R.data[j] = L.data[i]; } j--;}参考了答案的原创 2022-03-24 20:56:21 · 2537 阅读 · 1 评论 -
2.2.1 从顺序表中删除一个具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行
顺序表中删除一个具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。算法思想:搜索整个顺序表,查找最小值并记住其位置,搜索结束后用最后一个元素填补空出的最小值元素的位置碎碎念:大概的思路跟参考算法差不多,就是第一次实现题目想写一个完整的程序,但其实只需要写个函数就行,但是这样的话我没办法保证自己的代码是正确的,只能说算法思想是一样的。我的代码:函数部分:(代码思路没什么问题,但运行会报错!)int DelMin(SqLis原创 2022-03-24 20:36:29 · 1573 阅读 · 0 评论 -
动态分配(malloc free)
代码来源于王道数据结构,纯手打,有无错误感谢指出。#include <stdlib.h>#define InitSize 10 //默认的最大长度 typedef struct { int* data; //指示动态分配数组的指针 int MaxSize; //顺序表的最大容量 int length; //顺序表的当前长度}SeqList;void InitList(SeqList& L) { //用malloc函数申请一片连续的存储空间 L.data = (in.原创 2022-03-22 20:27:21 · 553 阅读 · 0 评论