第一章 绪论
1.1代码要规范
1.1.1 包含 n 个元素的数组 R ,向左移动 p 请用代码描述
思路:将 R 中前 p 个元素逆序,剩下的元素也逆序,最后数组整体逆序
code
//数组逆序,实际操作
void reverse(int R[],int l,int r){
for(int i=l,j=r;i<j;i++,j--){
int tmp = R[i];
R[i] = R[j];
R[j] = tmp;
}
}
//先部分逆序,最后全部逆序
void PCR(int R[],int n,int p){
if(p<=0||p>=n) return 0;
else{
reverse(R,0,p-1);
reverse(R,p,n-1);
reverse(R,0,n-1);
}
}
1.1.2 C&C++ 语言基础
- 数据类型
(1)基本数据类型:int char float long 等
(2)结构型-用户自己组装的数据类型
- 数组
int a[100] ; 名字a,100个int型的变量连续的摆在一起,其中各个变量之间的位置通过下标来反映- 结构体
typedef struct{
int a;
char b;
float c;
}TypeA;
这是一个新的数据类型,TypeA型。(3)指针类型
对于别的类型的变量,变量中所装的数据元素的内容,而指针变量内部装的是变量的地址,通过这个地址就可以找出变量在内存中的位置。
int b=10;
int *a;
a=&b; //将b的地址存在a中
int x=*a; //*a取变量b的内容(4)节点的构造链表
链表结点的定义
typedef struct Node{
int data ; //数据域
struct Node * next ; //指针域,指向一个和自己相同的类型的指针变量
}Node;二叉树结点的定义
在链表结点结构型的基础上,再加一个指向自己同一类型变量的指针域,即为二叉树结点的结构型。
typedef struct BTNode{ int data ; struct BTNode *lchild; struct BTNode *rchild; }BTNode;
二叉树结点的制作,
BTNode BT;
BT=(BTNode *)malloc(sizeof(BTNode)); //这种是一次申请 1 个结点。
BT=(BTNode *)malloc(n*sizeof(BTNode)); //这种的是动态的一次申请了 n 个结点。(5)关于typedef和#define
- typedef 给现有的数据类型起一个新的名字
- define 可以定义一些常量
2.函数
int a;
- void f(int x){++x;}
f(a);这样不能改变 a 的值,因为这样传入之后只是拷贝了一份,不会实质上改变 a 值。- void f(int &x){++x;}
f(a);这样是可以改变的,因为是把 a 的地址传入了,这是引用型。- 如果传入的是指针型变量,并且要在传入后对指针进行改变,需按如下写
void f(int *&x){++x;}
1.2 算法时间复杂度和空间复杂度分析
O(1)<< O(log_2(n))<< O(nlog_2(n))<< O(n^2)<< O(n^3)<< …<< O(n^k)<< O(2^n)
1.3 数据结构和算法的基本概念
1.3.1 基本概念
- 数据:对客观事物的符号表示。
- 数据元素:是数据的基本单位,一个数据元素可由若干的数据项组成。eg, 一本书的书目信息的每一项由书名、作者组成。
- 数据项:是数据结构中讨论的最小单位。
- 数据对象:性质相同的数据元素的集合,是数据的一个子集。eg, 大写字母就是一个数据对象。
- 数据结构:是指相互之间存在一种或多种特定关系的数据元素的集合。数据结构包括三方面的内容:逻辑结构、存储结构和对数据的运算或操作。
数据逻辑结构:是指对数据之间关系的描述,与数据怎么样存储的没有关系,同一种逻辑结构可以有多种存储结构
- 线性结构:数据元素的有序集合
(1)必存在唯一一个第一个元素
(2)必存在唯一一个最后一个元素
(3)除最后一个元素外,其他数据元素均存在唯一的后继
(4)除第一元素外,其他数据元素均存在唯一的前驱
* 线性结构中数据元素之间存在一对一的线性关系* - 非线性结构
与线性结构相比,非线性结构的结点中存在着一对多的关系,其可以细分为树形结构和图形结构
- 线性结构:数据元素的有序集合
数据物理结构
数据元素之间的关系在计算机中有两种不同的表示方法:顺序映像和非顺序映像,对应两种不同的存储结构分别是顺序存储和链式存储- 顺序存储
把逻辑结构上相邻的结点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。在C&C++中通常使用数组来描述。 - 链式存储
不要求逻辑上相邻的结点在物理存储上也是相邻的,结点之间的逻辑关系由附加的指针字段来表示。在C&C++中通常使用指针类型来描述。 - 索引存储
在存储结点信外,还建立附加的索引表来标识结点的地址。索引项一般形式是<关键字 , 地址>。关键字标示唯一一个结点,地址作为指向结点的指针。 - 散列存储
根据结点的关键字通过散列函数直接计算出该结点的存储地址,这种方法本质上是顺序存储的扩展方法
8.数据类型和变量
- 数据类型
是一个值得集合以及定义在这个值集上的一组操作 - 变量
变量是用来存储值得所在处,他们有名字和数据类型。变量的数据类型决定了如何将代表这些值存储到计算机内存中。
- 顺序存储
1.3.2 算法基本概念
算法
基本也运算
算法特性
- 有穷性
有限步骤内完成 - 确定性
每一步骤有确切的含义 - 输入
有0 个或多个输入,0个也就是算法本身确定了初始化条件 - 输出
有1个或者多个输出 - 可行性
算法通过已经实现的基本操作进行运算
- 有穷性
算法设计目标
- 正确性
- 可读性
- 健壮性
- 高效率与低存储量
【参考】
天勤-数据结构高分笔记 第一章 绪论
转载请注明出处