数据结构进阶实训二 顺序表
Data structure advanced training course notes and algorithm exercises 数据结构进阶实训课程笔记和算法练习
Source Code: https://github.com/MysticalGuest/DataStructure/tree/master/AdvancedJuniorTraining
题目1
1 | 输入数字n,按顺序打印输出从1到最大的n位十进制数。比如输入3,则打印出1,2,3,一直到最大的3位数999。 |
1.1 算法设计思想
这题主要解决大数问题。我用字符串来解决大数问题。
那么字符串中所有字符都是数字;
首先动态分配字符串空间为(n+1)*char,字符串最后要有一个结束符’\0’,初始化其他位为0;
然后每一次为字符串表示的数字加1,再打印出来;
方法print()会遍历字符串,直到遇到第一个非0字符后,打印后面的字符;
关键方法printRecursively(),每10个数,对具体位数加1,然后进位,递归。
1.2 源代码
1 | void printRecursively(char *number, int n, int index){ |
1.3 运行情况截图
题目2
1 | 已知一个顺序表L(整数) |
2.1 算法设计思想
定义一个规则rule方法,根据用户输入,确定排序规则,增加代码复用性;
三种排序规则思想一样:
(1)start=0从顺序表头开始往后,end从尾开始往前,
start遇到偶数停止,end遇到奇数停止,交换下标为start和下标为end的元素,然后继续前进;
(2)start=0从顺序表头开始往后,end从尾开始往前,
start遇到正数停止,end遇到负数停止,交换下标为start和下标为end的元素,然后继续前进;
(3)start=0从顺序表头开始往后,end从尾开始往前,
start遇到不能被3整除的数停止,end遇到能被3整除的数停止,交换下标为start和下标为end的元素,然后继续前进。
2.2 源代码
1 | /*宏定义*/ |
2.3 运行情况截图
题目3
1 | 给定一个整数数组,删除相邻的重复数字,结果数组中不能存在任何相邻的重复数字。 |
3.1 算法设计思想
将数组存入顺序表;
遍历顺序表,将下标为i和下标i+1的元素比较如果相等,进行判断:
如果下标为i和下标i+2的元素相等,所有元素往前移动1位;
如果下标为i和下标i+2的元素不相等,所有元素往前移动2位;
持续上述循环,结束的标志是遍历顺序表,没有相邻相同元素就结束循环。
3.2 源代码
1 | while(flag==1){ |
3.3 运行情况截图
题目4
1 | 已知顺序表L(数组表示即可),编写一个时间复杂度O(n),空间复杂度为O(1)的算法 |
4.1 算法设计思想
遍历顺序表,将顺序表a的元素赋给顺序表b,遇到要删除的元素就跳过。
4.2 源代码
1 | void deleteList(SeqList *LA, SeqList *LB, int n){ |
4.3 运行情况截图
题目5
1 | 将n 个整数存入顺序表L,实现将L中的整数序列循环左移p(0<p<n)个位置, |
5.1 算法设计思想
将下标0到p的元素逆置;
将下标p+1到n 的元素逆置;
最后将整个顺序表逆置得到最终结果。
5.2 源代码
1 | void main(){ |
5.3 运行情况截图