数据结构概述
定义:把现实中大量复杂的问题以特定的数据类型和特定的存储结构保存到
主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素,删除某个元素,
对所有元素进行排序)而执行的相应操作(算法)。(解决存储)
数据结构 = 个体 + 个体的关系
算法
对存储数据的操作
解题的方法和步骤
衡量算法的标准
1. 时间复杂度
程序大概要执行的次数,而非执行的时间
2. 空间复杂度
算法执行过程中大概所占用的最大内存
3. 难易程度
4. 健壮性
数据结构特点:
数据结构是软件中最核心的课程
预备知识
指针
指针的重要性
指针是C语言的灵魂
定义
地址就是内存单元的编号(CPU能直接访问内存,编号是从0开始的非负整数),
编号范围:0 ~ 4G-1
指针:
指针就是地址,地址就是指针
指针的变量是存放内存单元地址的变量
指针的本质是一个操作受限的非负整数
举例:
#include <stdio.h>
int main(void)
{
int *p; // 定义一个指针变量
int i = 10;
int j;
p = &i; // 把i的地址赋值给指针变量p,p指向i,此时*p代表了i
// int *p = &i; // 等价于 int *p; p = &i;
printf("p存储i的内存地址是:%d
", p);
printf("*p代表了i: %d
", *p); //10
return 0;
}
如何通过被调函数修改主调函数中普通变量的值
#include <stdio.h>
void f(int *p) // 形参是以该变量的类型为类型的指针变量
{
*p = 100;
}
int main(void)
{
int i = 9;
f(&i); // 实参为相关变量的地址
printf("i的值是: %d
", i);
return 0;
}
结构体
动态内存的分配和释放
模块一:线性结构
连续存储[数组]
离散存储[链表]
线性结构的两种常见应用之一 栈
线性结构的两种常见应用之一 队列
专题:递归
1. 1+2+3+4+...+100的和
2. 求阶乘
3. 汉诺塔
4. 走迷宫
模块二:非线性结构
树
图
模块三:查找和排序
折半查找
排序:
冒泡
插入
选择
快速排序
归并排序
Java中容器和数据结构相关知识
Iterator接口
Map
哈希表