数据结构第一章

本人使用的书是李春葆主编的数据结构教程第五版;

第一章呢,讲了一些时间复杂度,空间复杂度,数据的逻辑结构物理结构等等的一些定义以及一些简单的代码示例;

集合、线性结构、树形结构、图形结构;

顺序存储结构、链式存储结构、索引存储结构、哈希存储结构;

第五版相较于第四版增加说明了一下 typedef ,但其实相较于书中使用 typedef ,我们也可以使用模板来定义;

还有一个共用体 union ,我记得当初学习 C 的时候,觉得 union 实实在在是个bug ,到现在才知道如何简单的用一下,以往学的看似无用的知识,只是我们的层次不够接触不到它的应用,学的越来越多之后,才会发现他的用途;均可自行百度;

最后贴一下课后习题中的上机实验:

第一题:我们如何知道一个运算,需要花多长时间呢?C 里面提供了 clock 函数,可以根据这个来计算时间;记得加上头文件 time.h(ctime);

实际上这个函数需要配套使用:

1 clock_t start,finish;
2     start = clock();
3     {
4     //你需要测试时间的代码
5     }    
6     finish = clock();
7     cout<<(double)(finish - start)/CLOCKS_PER_SEC<<endl;
CLOCKS_PER_SEC是标准c的time.h头函数中宏定义的一个常数,表示一秒钟内CPU运行的时钟周期数,
用于将clock()函数的结果转化为以秒为单位的量,但是这个量的具体值是与操作系统相关的。
 1  1 #include<iostream>
 2  2 #include<ctime> 
 3  3 
 4  4 using namespace std;
 5  5 
 6  6 int main()
 7  7 {
 8  8     long long i,sum = 0,n = 10000;
 9  9     clock_t start0,finish0,start1,finish1;
10 10     start0 = clock();
11 11     for(i = 1;i <= n;i++)
12 12         sum += i;
13 13         cout<<sum<<endl;
14 14     finish0 = clock();
15 15     cout<<(double)(finish0 - start0)/CLOCKS_PER_SEC<<endl;
16 16     
17 17     start1 = clock();
18 18         sum = n*(n+1)/2;
19 19     cout<<sum<<endl;
20 20     finish1 = clock();
21 21     cout<<(double)(finish1 - start1)/CLOCKS_PER_SEC<<endl;
22 22     return 0;
23 23 }
View Code

第二题:math 函数应有尽有;

 1 /*
 2 0       1       1       0       1       1       2       1
 3 1       1.41421 2       2       4       8       4       2
 4 1.58496 1.73205 3       4.75489 9       27      8       6
 5 2       2       4       8       16      64      16      24
 6 2.32193 2.23607 5       11.6096 25      125     32      120
 7 2.58496 2.44949 6       15.5098 36      216     64      720
 8 2.80735 2.64575 7       19.6515 49      343     128     5040
 9 3       2.82843 8       24      64      512     256     40320
10 3.16993 3       9       28.5293 81      729     512     362880
11 */
 1 #include<iostream>
 2 #include<cmath>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int i,n = 10;
 9     int sum2 = 1,sum_ = 1;
10     for(i = 1;i<n;i++)
11     {
12         cout<<log(i)/log(2)<<"	";
13         cout<<sqrt(i)<<"	";
14         cout<<i<<"	";
15         cout<<i*log(i)/log(2)<<"	";
16         cout<<i*i<<"	";
17         cout<<i*i*i<<"	";
18         cout<<(sum2 *= 2)<<"	";
19         cout<<(sum_ *= i)<<"	";
20         cout<<endl;
21     }
22     return 0;
23 }
View Code

第三题:

说实话,我最开始只能想出 k 与 根号k ,显然这种方法感觉。。。。。(想贴一张表情包)

附上一个连接,看看别人的代码;

https://www.jianshu.com/p/d6736b492720

第四题:

开始拿到这题的时候,眼睛一亮,这**不是泰勒吗,发现我是真的菜,看错了原来不是,亏我还写了一遍 e 的展开;

然后开始找规律的不归之路;

1 5!+ 4!+ 3!+ 2!+ 1!
2 =(5 + 1)4!  + 3!+ 2!+ 1!
3 =[(5 + 1)4 + 1]3!+ 2!+ 1!
4 .........
#include<iostream>

using namespace std;

int main()
{
    int i,n = 5,sum = 1;
    for(i = n;i>1;i--)
        sum = sum*i +1;
    cout<<sum<<endl;
    return 0;
}
View Code

有错误敬请指正,虚心接受;

2020-03-14

原文地址:https://www.cnblogs.com/2015-16/p/12491868.html