网站开发代码h5,连云港网站建设开发,竞价账户托管的公司有哪些,老域名新网站目录
数据结构概述
预备知识#xff1a;
模块#xff1a; 这篇笔记是根据郝斌老师的上课讲义整理而得#xff1a;
数据结构概述
定义#xff1a;如何把现实中大量复杂的问题以特定的数据类型和特定的存储结构保存到主存储器中(内存)中#xff0c; 以及在此基础上为实…目录
数据结构概述
预备知识
模块 这篇笔记是根据郝斌老师的上课讲义整理而得
数据结构概述
定义如何把现实中大量复杂的问题以特定的数据类型和特定的存储结构保存到主存储器中(内存)中 以及在此基础上为实现某一个功能而执行的相应操作这个相应的操作也叫算法。
特定的数据类型和结构是指如果我们保存少量的数据我们可以使用数组连续如果保存大量的数据我们就必须使用链表不连续通过指针相连如果我们还要保存数据item之间的关系如一个部门的上下级关系我们就必须使用树来保存如果我们要保存一个城市的地图任何节点之间都可能产生关系那我们必须使用图来保存。
数据结构 个体的存储个体的关系存储 算法 对存储数据的操作
算法 解题的方法和步骤 衡量算法的标准 1. 时间复杂度大概程序要执行的次数而非执行的时间 2. 空间复杂度算法执行过程中大概所占用的最大内存 3. 难易程度 4. 健壮性
数据结构的地位 数据结构是软件中最核心的课程 程序 数据的存储 数据的操作 可以被计算机执行的语言 预备知识
1指针
指针是C语言的灵魂
表示一些复杂的数据结构 快速的传送数据使函数返回一个以上的值能直接访问硬件 能够方便的使用数组和字符串是理解面向对象语言中引用的基础
定义地址内存单元的编号。指针变量占4个字节。指针就是地址 地址就是指针指针变量是存放内存单元地址的变量指针的本质是一个操作受限的非负整数
分类 1. 基本类型的指针 int *i;
如何通过被调函数修改主调函数中普通变量的值
Ⅰ 实参为相关变量的地址
Ⅱ 形参为以该变量的类型为类型的指针变量Ⅲ在被调函数中通过 *形参变量名 的方式就可以修改主函数相关变量的值void f(int * p) //不是定义了一个名字叫做*p的形参, 而是定义了一个形参该形参名字叫做p,它的类型是int *
{*p 100; //
}int main(void)
{int i 9;f(i);printf(i %d\n, i);return 0;
} 2. 指针和数组的关系
指针 和 一维数组 数组名
一维数组名是个指针常量它存放的是一维数组第一个元素的地址 它的值不能被改变一维数组名指向的是数组的第一个元素 int a[5] {1,2,3,4,5};
printf(%p\n, *a1);//平移四个字节地址double arr[3];
double *q;
q arr[0];
q arr[1]; //平移8个字节地址但指针变量只占4个字节
void Show_Array(int * p, int len)
{int i 0;for (i0; ilen; i)printf(%d\n, p[i]);//p[2] -1; //p[0] *p p[2] *(p2) *(a2) a[2]//p[i]就是主函数的a[i]
}int main(void)
{int a[5] {1,2,3,4,5};Show_Array(a, 5); //a等价于a[0], a[0]本身就是int *类型//printf(%d\n, a[2]);return 0;
} 指针的指针
结构体 为什么会出现结构体 为了表示一些复杂的数据普通的数据类型无法满足要求 什么叫结构体 结构体是用户根据实际需要自己定义的复合数据类型 如何使用结构体
#include string.hstruct Student
{ int sid;char name[200];int age;
}; //分号不能省int main()
{strcpy(st.name, lisi);struct Student * pst st;pst-sid (*pst).sid st.sid; //pst所指向的结构体变量中sid成员} 注意事项 结构体变量不能加减乘除但可以相互赋值 普通结构体变量和结构体指针变量作为函数参数的问题
传输的时候最好传输指针地址而不要传输变量因为变量可能需要传输很多字节而指针始终传输的是四个字节。 动态内存的分配和释放
int * pArr (int *)malloc(sizeof(int) * len);//等价于 int pArr[len]
*pArr 4;//等价于a[0] 4
pArr[1] 10;//等价于a[1] 10free(pArr);1、 malloc只有一个int型的形参表示要求系统分配的字节数
2、 malloc函数的功能是请求系统len个字节的内存空间如果请求分配成功则返回第一个字节的地址如果分配不成功则返回NULL
3、 malloc函数能且只能返回第一个字节的地址所以我们需要把这个无任何实际意义的第一个字节的地址俗称干地址转化为一个有实际意义的地址因此malloc前面必须加数据类型 *,表示把这个无实际意义的第一个字节的地址转化为相应类型的地址。如
int *p (int *)malloc(50); 表示将系统分配好的50个字节的第一个字节的地址转化为int *型的地址更准确的说是把第一个字节的地址转化为四个字节的地址这样p就指向了第一个的四个字节p1就指向了第2个的四个字节pi就指向了第i1个的4个字节。p[0]就是第一个元素 p[i]就是第i1个元素double *p (double *)malloc(80);
表示将系统分配好的80个字节的第一个字节的地址转化为double *型的地址更准确的说是把第一个字节的地址转化为8个字节的地址这样p就指向了第一个的8个字节p1就指向了第2个的8个字节pi就指向了第i1个的8个字节。p[0]就是第一个元素 p[i]就是第i1个元素
freep
释放p所指向的内存而不是释放p本身所占用的内存 模块
模块一线性结构
连续存储[数组]
离散存储[链表]
线性结构的两种常见应用之一 栈
线性结构的两种常见应用之二 队列
专题递归
123...100求阶乘汉诺塔走迷宫
模块二 非线性结构
树图
模块三: 查找和排序
折半查找
排序
冒泡快速排序插入排序选择排序归并排序