![数据结构(C++版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/421/656421/b_656421.jpg)
习题1
1-1什么是数据、数据元素、数据项?三者之间是怎样的关系?
1-2什么是数据结构?数据结构的概念包括哪三部分?
1-3数据结构与数据类型的概念有什么区别?为什么要将数据结构设计成抽象数据类型?
1-4数据的逻辑结构主要有哪三种?各有何特点?三者之间存在怎样的联系?
1-5数据的存储结构有哪两种?各有何特点?
1-6什么是算法?怎样描述算法?怎样衡量算法的性能?
1-7下列函数的功能是什么?
void binary(int n) { whiIe(n>0) { cout<<n<<","; n/=2; } }
1-8确定下列算法中语句的执行次数,并给出算法的时间复杂度。
int n=10, count=0; for(int i=1; i<=n; i++) for(int j=1; j<=i; j++) for(int k=1; k<=j; k++) count++;
实验1 算法设计与分析
1.实验目的
了解数据结构课程的目的、性质和主要内容,理解数据结构和算法的基本概念,熟悉算法的描述方法、算法时间复杂度和空间复杂度的分析和计算方法。
要求熟练使用Visual C++ 6.0集成开发环境进行C++程序的编辑、编译和运行,程序必须运行通过并获得正确结果,详见第11章。
2.实验内容
(1)实现以下对数组的操作,并给出算法的时间复杂度和空间复杂度。
T max(T tabIe[],int n) //返回数组中的最大值 T min(T tabIe[],int n) //返回数组中的最小值 booI repIace(T tabIe[],int n,int x,int y) //将n个元素的数组中值为x的元素替换为y值 booI repIaceAII(T tabIe[],int n,int x,int y) //将数组中所有值为x的元素替换为y值 booI isSorted(T tabIe[],int n) //判断数组元素是否已按升序排序 void reverse(T tabIe[],int n) //将数组元素a0,a1,…,an-1逆置为an-1,…,a1,a0
(2)用C++的类实现复数抽象数据类型。
(3)实现十进制、二进制、八进制和十六进制的相互转换。
(4)螺旋方阵。
螺旋方阵将从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。例如,4阶的螺旋方阵排列形式如下:
![](https://epubservercos.yuewen.com/30C705/3590315703049101/epubprivate/OEBPS/Images/figure_0029_0001.jpg?sign=1738898663-2jDI372qDukZwpIKihc4vUOMcaP7g9p0-0-d5df9d9aa24e3632a9f90230112bb3bf)
![](https://epubservercos.yuewen.com/30C705/3590315703049101/epubprivate/OEBPS/Images/figure_0029_0002.jpg?sign=1738898663-aPu27cWYTKeWOqq7OYvayTA8dZTSJXvn-0-7dcb5670206e35aefb1bdc191e0c1843)
(5)杨辉三角。
中国南宋数学家杨辉在其《详解九章算法》(1261年)中给出以下三角形(后世称为杨辉三角),表中任何一个数字等于它肩膀上的两个数字之和。n=5的杨辉三角如下:
![](https://epubservercos.yuewen.com/30C705/3590315703049101/epubprivate/OEBPS/Images/figure_0029_0003.jpg?sign=1738898663-8nfqLSKrQS2ziz3cGTeV5QpV4fs4kN9o-0-0d64813e818dd7bf65da6b4ee66e277a)
杨辉三角的重要意义在于,其各行是二项式(a+b)n(n=0,1,2,…)展开式的系数表。n=2和n=3的展开式如下:
(a+b)2=a2+2ab+b 2(a+b)3=a3+3a2b+3ab2+b 3
要求分别采用一维数组、二维数组输出杨辉三角。
(6)下标和相等的数字方阵。
![](https://epubservercos.yuewen.com/30C705/3590315703049101/epubprivate/OEBPS/Images/figure_0029_0004.jpg?sign=1738898663-tyNxXDS2CBM4fVNDcZWTNzokW2vvUWFJ-0-252a426c0f2ee4eb875776392e04221b)
![](https://epubservercos.yuewen.com/30C705/3590315703049101/epubprivate/OEBPS/Images/figure_0029_0005.jpg?sign=1738898663-4W4eWF6yOuB8IoKHCu1kMHCVIjw5TlAR-0-ed7cb2e6b969816c77662f647a0e6939)
(7)输出n个元素的全排列。
如n=3时,数据序列{1, 2, 3}的全排列为:123,132,213,231,312,321。
(8)设计一个矩阵类,构造n阶矩阵,实现矩阵加、乘、转置等运算,并求各算法的时间复杂度。
(9)实现直接选择排序。
(10)幻方。
n阶幻方(magic square)是指将自然数1~n2排列成n×n阶方阵,其各行、各列及各对角线上的数字之和相等,和数S=n(n2+1)/2。洛书(传说大禹治水时洛水神龟所献)上的3阶幻方和杨辉的4阶幻方如图1.11所示,3阶幻方的和数为15,4阶幻方的和数为34。
![](https://epubservercos.yuewen.com/30C705/3590315703049101/epubprivate/OEBPS/Images/figure_0030_0001.jpg?sign=1738898663-z23diXhj5JjWDz5PjYLIrSfEhvNAnMCl-0-5bcb926904729ee06148a2f5637c9cf3)
图1.11 3阶和4阶幻方
幻方有许多构造方法。杨辉在《续古算法摘奇》(1275年)中给出解法,“九子斜排,上下对易,左右相更,四维挺出”,如图1.12所示。
![](https://epubservercos.yuewen.com/30C705/3590315703049101/epubprivate/OEBPS/Images/figure_0030_0002.jpg?sign=1738898663-SuC9xJXeQ0jglm8yFES7ToPU9NXSh8bk-0-18a281c7fd2101ded9e6dcd564bd2590)
图1.12 杨辉的幻方构造法
连续摆数法(也称暹罗法)适用于构造奇数阶幻方,构造过程如图1.13所示。
![](https://epubservercos.yuewen.com/30C705/3590315703049101/epubprivate/OEBPS/Images/figure_0030_0003.jpg?sign=1738898663-7V6KUpKg2sn7Fi6QfIMbOixSadrs3Ale-0-194ecddc3ad6e24c87cf20ebb3526e58)
图1.13 连续摆数法构造奇数阶幻方
连续摆数法构造规律说明如下:
① 约定初始位置为第1行中间,放置1。
② 向当前位置的右上方顺序放置下一个数。将幻方阵沿行、列方向看成环形。
③ 若当前放置数为n的倍数,即一条对角线已满,则下一个数的位置是本列的下一行。
④ 输出幻方阵。
要求采用连续摆数法构造并输出指定奇数阶的幻方阵。