第二章学习小结

先大致整理一下开学到现在学到的知识:

1.数据结构中逻辑结构和存储结构的概念。

2.顺序存储结构

(一)顺序存储结构的数据元素之间的存储空间连续;

(二)线性存储的优缺点:①优点:可随机存取;②缺点:插入、删除等操作较为不便,所以不利于进行大量的插入删除操作。

3.链式存储结构

(一)链式存储结构的数据元素之间的存储空间可以不连续;

(二)链式存储的优缺点:①优点:插入、删除等操作较为方便,所以有利于进行大量的插入删除操作;②缺点:按下标查询的效率低。

4.评价算法优劣的基本标准

(一)算法的时间复杂度

不考虑计算机的软硬件等环境因素,影响算法时间代价的最主要因素是问题规模,问题规模是算法求解问题输入量的多少,是问题大小的本质表示,一般用整数n表示;

一个算法的执行时间大致上等于其所有语句执行时间的总和,而语句的执行时间则为该条语句的重复执行次数和执行一次所需时间的乘积;

一条语句的重复执行次数称作语句频率;

所谓的算法分析并非精确统计算法实际执行所需时间,而是针对算法中语句的执行次数做出统计,从中得到算法执行时间的信息;

一般情况下,算法总基本语句重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作T(n)=O(f(n)),它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。

算法的平均时间复杂度是指算法在所有可能情况下,按照输入实例以等概率出现时,算法计算量的加权平均值,然而在很多的情况下,算法的平均时间复杂度难于确定,因此,通常只讨论算法在最坏情况下的时间复杂度。

(二)算法的空间复杂度

一般情况下,一个程序在机器上执行时,除了需要寄存本身所用的指令、常熟、变量和输入数据外,还需要一些数据进行操作的辅助存储空间;

若算法执行时所需要的辅助空间相对于输入数据量而言是个常熟,则称这个算法为原地工作,辅助空间为O(1);

扩展知识(栈溢出攻击):

缓冲器填入过多的数据,超出边界,导致数据外溢。同时利用缓冲器溢出改写数据、改变程序执行流程。 执行shellcode

之所以会有缓冲区溢出的可能,主要是因为栈空间内保存了函数的返回地址。该地址保存了函数调用结束后后续执行的指令的位置,对于计算机安全来说,该信息是很敏感的。如果有人恶意修改了这个返回地址,并使该返回地址指向了一个新的代码位置,程序便能从其它位置继续执行。

实际上很多程序都会接受用户的外界输入,尤其是当函数内的一个数组缓冲区接受用户输入的时候,一旦程序代码未对输入的长度进行合法性检查的话,缓冲区溢出便有可能触发!

参考来源:https://blog.csdn.net/guilanl/article/details/51887111

5.第一章的小结

(一)算法的五个特性:有穷性、确定性、可行性、输入和输出。

(二)算法优劣的评价标准:正确性、可读性、健壮性和高效性。

(三)数据结构的存储方式有顺序、链式、散列和索引4种方式。

6.线性表的顺序存储表示

(一)特点:逻辑上相邻的数据元素,其物理次序也是相邻的;

(二)基本操作的时间复杂度:①取值:O(1);②查找:O(n);③插入:O(n);④删除:O(n);

7.单链表

(一)首元结点、头结点、头指针的说明:

①首元结点是指链表中存储第一个数据元素a1的结点;②头结点是在首元结点之前附设的一个几点,其指针域指向首元结点。头结点的数据域可以不存储任何信息,也可存储与数据元素类型相同的其他附加信息。例如数据元素为整数型时,头结点的数据域中科存放该线性表的长的;③头指针是指向链表中第一个结点的指针。若链表设有头结点,则头指针所指结点为线性表的头结点;若链表不设头结点,则头结点所指结点为该线性表的首元结点;

(二)基本操作的时间复杂度:①取值:O(1);②查找:O(n);③插入:O(n);④删除:O(n);⑤创建:O(n);

(三)例如 p->next = a1; 这样的语句可以把等号看成 -> ,便于理解;

心得体会:

多打题、多学习、上课必须认真听

很多不懂的都可以在百度、CSDN等找得到,最主要的是要形成自己的思维方式。

很多知识上学期自己都有了解过,像sort函数这些如果平时不怎么打题的话可能会忘得很快(像我之前这样哈哈),所以有事没事多敲敲代码是非常重要的。

 

 

 

 

 

 

 

 

 

posted @ 2019-03-16 15:22  07-14  阅读(201)  评论(1编辑  收藏  举报