数据结构笔记.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据结构笔记.pdf》由会员分享,可在线阅读,更多相关《数据结构笔记.pdf(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、/2018/5/23/2018/5/23数据结构概述:数据结构概述:预备知识模块一:线性结构模块一:线性结构连续存储连续存储 数组数组 离散结构离散结构 链表链表 线性结构的两种常见应用之一线性结构的两种常见应用之一栈堆栈栈堆栈线性结构的两种常见应用之二线性结构的两种常见应用之二队列队列专题:递归专题:递归 1.1+2.+100 的和模块二:非线性结构模块二:非线性结构树图模块三:查找和排序模块三:查找和排序折半查找排序:冒泡插入选择快速排序补录:补录:JavaJava 中容器和数据结构相关知识中容器和数据结构相关知识 Iterator 接口 Map 哈希表严蔚敏-高一凡高一凡-黄国瑜归并排序
2、/2018/5/24/2018/5/24数据结构概述数据结构概述定义定义我们如何把现实中大量而复杂的问题以特定的数据类型特定的数据类型和特定的存储结构特定的存储结构保存到主存储器内存中,以及在此基础上为实现某个功能比方查找或删除某个元素,对所有元素进行排序而执行的相应操作,这个相应操作叫做算法。特定的数据类型特定的数据类型:个体如何保存个体如何保存特定的存储结构特定的存储结构:个体与个体的关系如何保存个体与个体的关系如何保存数据结构数据结构=个体的存储个体的存储+个体关系的存储个体关系的存储算法狭义算法狭义=对存储数据的操作对存储数据的操作算法:即解题的方法和步骤衡量算法的标准1.时间复杂度重
3、要大概程序要执行的次数,而非执行的时间2.空间复杂度重要算法执行过程中大概所占用的最大内存3.难易程度4.健壮性数据结构的地位数据结构是软件中最核心的课程。程序=数据的存储+数据的操作+可以被电脑执行的语言预备知识:预备知识:指针指针结构体结构体动态内存的分配和释放动态内存的分配和释放指针:指针:指针的重要性:表示一些复杂的数据结构快速的传送数据使函数返回一个以上的值能否直接访问硬件能够方便的使用数组和字符串是理解面向对象语言中引用的基础指针是指针是 C C 语言的灵魂语言的灵魂定义地址内存单元的编号从 0 开始的非负整数范围 0-FFFFFFFF【0 到 4G-1】注:无论一个变量有多大,其
4、地址只用第一个字节的地址表示,均只占四个字节。指针指针就是地址指针就是地址地址就是指针地址就是指针指针变量就是存放内存单元地址的变量指针本质上就是一个操作受限的非负整数分类1、基本类型指针【略】基本概念int i=10;int*p=&i;/等价于 int*p;p=&i;详解这两部操作:1p 存放了 i 的地址,所以我们说 p 指向了 i2p 和 i 是完全不同的两个变量,修改其中的任意一个变量的值,不会影响另一变量的值3p p 指向指向 i i,*p*p 就是就是 i i 变量本身变量本身。更形象的说所有出现*p 的地方都可以换成 i,所有出现 i 的地方都可以换成*p4int*p,不是定义了
5、*p 的参数,而是定义了一个变量p,为 int*类型。总结:1、如何一个指针变量(假定为 p)存放了某个普通变量(假定为 i)的地址,那我们就可以说:“p 指向了 i”,但 p 与 i 是两个不同的变量,修改 p 的值不影响 i 的值,修改 i 的值不影响 p 的值.2、*p 等价于 i 或者说*p 可以与 i 在任何地方互换3、如果一个指针变量指向了某个普通变量,则*指针变量就完全等价于该普通变量注意:指针变量也是变量,只不过它存放的不能是内存单元的内容,只能存放内存单元的地址普通变量前不能加*常量和表达式前不能加&如何通过被调函数修改主调函数中普通变量的值 实参为相关变量的地址 形参为以该
6、变量的类型为类型的指针变量 在被调函数中通过*形参变量名 的方式就可以修改主函数相关变量的值Eg:void f(int*p)/II *p=100;/IIIint main(void)int i=9;f(&i);/Iprintf(“i=%dn”,i);指针和数组的关系指针和数组的关系指针 和 一维数组数组名一维数组名是个指针常量,它存放的是一维数组第一个元素的地址,它的值不能被改变一维数组名指向的是数组的第一个元素下标和指针的关系ai *(a+i)ai *(a+i)*a+3=a0+3假设指针变量的名字为 p则 p+i 的值是 p+i*(p 所指向的变量所占的字节数)指针变量的运算指针变量不能相加
7、,不能相乘,不能相除如果两指针变量属于同一数组,则可以相减指针变量可以加减一整数,前提是最终结果不能超过指针允许指向的范围p+i 的值是 p+i*(p 所指向的变量所占的字节数)p-i 的值是 p-i*(p 所指向的变量所占的字节数)举例p+p-p+1 p-1如何通过被调函数修改主调函数中一维数组的内容【如何界定一维数组】两个参数存放数组首元素的指针变量存放数组元素长度的整型变量所有的指针变量只占所有的指针变量只占 4 4 个子节个子节用第一个字节的地址表示整个变量的地址用第一个字节的地址表示整个变量的地址动态内存分配和释放:动态内存分配和释放:程序在运行过程中可以动态的增加或减少内存分配程序
8、在运行过程中可以动态的增加或减少内存分配 动态构造一维数组假设动态构造一个 int 型数组int*p=(int*)malloc(int len);1、malloc 只有一个 int 型的形参,表示要求系统分配的字节数2、malloc 函数的功能是请求系统 len 个字节的内存空间,如果请求分配成功,则返回第一个字节的地址,如果分配不成功,则返回 NULL3、mallocmalloc 函数能且只能返回第一个字节的地址函数能且只能返回第一个字节的地址,所以我们需要把类型不一样。即所占的字节数也不确定这个无任何实际意义的第一个字节的地址俗称干地址转化为一个有实际意义的地址,因此 malloc 前面必
9、须加数据类型*,表示把这个无实际意义的第一个字节的地址转化为相应类型的地址。如:int*p=(int*)malloc(50);表示将系统分配好的 50 个字节的第一个字节的地址转化为 int*型的地址,更准确的说是把第一个字节的地址转化为四个字节的地址,这样 p 就指向了第一个的四个字节,p+1 就指向了第 2 个的四个字节,p+i 就指向了第 i+1 个的 4个字节。p0就是第一个元素,pi就是第 i+1 个元素double*p=(double*)malloc(80);表示将系统分配好的 80 个字节的第一个字节的地址转化为 double*型的地址,更准确的说是把第一个字节的地址转化为 8
10、个字节的地址,这样 p 就指向了第一个的 8 个字节,p+1 就指向了第 2 个的 8 个字节,p+i 就指向了第 i+1个的 8 个字节。p0就是第一个元素,pi就是第 i+1 个元素freep:动态分配的内存,必须 free()释放,系统不会自动释放。释放 p 所指向的内存,而不是释放 p 本身所占用的内存【重点:动态分配数组内存】int *pArr=(int*)malloc(sizeof(int)*len);(最后一个*代表了乘分配了 4*len 个字节)模块一:线性结构模块一:线性结构【把所有的结点用一根直线穿起来】【把所有的结点用一根直线穿起来】连续存储连续存储 数组数组 元素类型元
11、素类型离散结构离散结构 链表链表 线性结构中两种常用应用之一线性结构中两种常用应用之一定义定义栈栈一种可以实现“先进后出”的存储结构只能从栈尾栈顶进和出。栈类似于箱子,局部变量都是在栈中存储的。分类分类静态栈【以数组为内核】动态栈【以链表为内核】算法算法出栈 pTop 向下移一个,pBottom 不变压栈入栈 pTop 向上移一个,pBottom 不变应用应用函数调用中断表达式求值例如计算器的编写缓冲处理内存分配/2018/5/20/2018/5/20线性结构中两种常用应用之二线性结构中两种常用应用之二队列队列定义:定义:一种可以实现“先进先出”的存储结构一种可以实现“先进先出”的存储结构分类
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 笔记
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内