您的位置:首页 > 其它

第一章 绪论

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个或者多个输出

可行性

算法通过已经实现的基本操作进行运算

算法设计目标

正确性

可读性

健壮性

高效率与低存储量

【参考】

天勤-数据结构高分笔记 第一章 绪论

转载请注明出处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: