第一章 绪论
2016-05-03 21:31
204 查看
第一章 绪论
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个或者多个输出
可行性
算法通过已经实现的基本操作进行运算
算法设计目标
正确性
可读性
健壮性
高效率与低存储量
【参考】
天勤-数据结构高分笔记 第一章 绪论
转载请注明出处
相关文章推荐
- 分析PNG图片格式——数据块
- SQL Server Performance 分析
- java内存模型
- 大话android之Activity生命周期
- hdu3089 Josephus again(快速约瑟夫环)
- Linux中iptables基础命令
- CS 50 第11节
- cocoapod 使用
- 无限轮播
- 【Hibernate】从入门到精通(五)关联映射之一对一映射
- Hibernate常见异常
- 深入浅出java 函数参数传递原理
- poj 1046 Color Me Less -- 模拟
- 向本地的apache服务器上传文件
- Hadoop实战【一、HDFS】
- php htmlentities和htmlspecialchars 的区别
- vijos1020—切蛋糕
- 四种简略的拓宽51单片机中断的妙招!
- Ubuntu 12.04.1 mysql从5.5升级到5.6
- python 爬虫实战--登陆学校教务系统获取成绩信息