您的位置:首页 > 理论基础 > 数据结构算法

java入门一DAY01------从数据结构开始1

2014-04-01 23:20 351 查看
个人整理笔记

好了,数据结构这门课程主要是看的严尉敏版本的,这本确实很经典也很精彩。

第一章 绪论(笔记)

数据元素是数据结构的基本单位。

数据项是数据结构不可分割的最小单位。

数据结构的定义:数据结构是一门对现实问题进行分析,从已知数据和未知数据中建立数学模型,并构建存储结构以及在计算机上操作和实现的一门学科。

四种基本结构:集合 线性结构 树形结构 图

数据结构分为:

逻辑结构:抽象的,数据关系

存储结构:顺序存储结构,非顺序存储结构

数据的类型

抽象数据类型:指一个数学模型以及定义在该模型上的操作

ADT={数据抽象,数据关系,基本操作}

定义 表示 操作

ADT主要是 是对数据的抽象模型

如下

ADT抽象据类型名{

数据对象:<数据对象的定义>

数据关系:<数据关系的定义>

基本操作:<基本操作的定义>

}ADT 抽象数据类名

基本操作名(参数表)

初始条件:<初始条件描述>

操作结果:<操作结果描述>

这种数据类型我们实际编程用的比较多

其他的还有 多形数据类型 主要是指其值的成分不确定的数据类型 三元组数据类型。

算法:是对特定的问题求解的一种描述。

有5个特性:有穷性 确定性 可行性 输入 输出

算法设计要求达到四个:正确性 可读性 健壮性 效率与低存储量

算法效率的度量:

事后分析法,有很多计算机可以采用计时的方式度量

事前分析估算法:这个主要是根据算法的策略,问题规模,实现算法的语言级别越高执行效率越低,编译和机器执行时间来估 计

时间复杂度

从算法中选取一种对于所研究的问题来说是基本操作的原操作,以该操作的重复执行的次数作为算法的时间度量。

在乘法运算中:

for(i=1;i<=n;++i)

for(j=1;j<=n;++j){

c[i][j]=0;

for(k=1;k<=n;++k)

c[i][j]+=a[i][k]*b[k][j] //整个算法的执行时间与该基本操作重复执行的次数N(3)成正比

} 记作 T(n)==O(n[3])

如何估算算法的时间复杂度

算法==控制结构+原操作

算法的执行时间==原操作的执行次数 X 原操作的执行时间

频度:语句的频度指的是该语句重复执行的次数

算法的空间复杂度:算法所需要的存储空间的度量

若额外空间相对于输入数据量来说是常数,则称此算法为原地工作

S(n)==O(F(n))

算法

冒泡排序:

void bubble_sort(int a[],int n)

//将a中整数序列重新排序自小至大

for(i=n-1,chang=TURE,i>=1&&change;--i){

change=FALSE;

for(j=0;j<i;++j)

if(a[j]>a[j+1]){

a[j]<-->a[j,i];change=TURE;

}

}

方法二:

void BubbleSort(DataType a[],int n)

{

for(i=0;i<=n-1;i++)

for(j=0;j<=n-i-1;j++)

if(a[j]>a[j+1])

a[j]<--->a[j+1];

}

逻辑结构+存储结构+操作==数据结构

存储结构:

顺序存储结构

链式存储结构

索引

散列

第二章 线性表(笔记)

线性表示N个数据元素的有限序列

特点:第一个只有后继,最后一个只有前驱,前驱,后继

1.逻辑上相邻的元素在物理上也相邻

2.随机访问

类型的定义:数组+长度

基本算法--遍历

顺序访问所有元素:

for(i=0;i<L.length;i++)

visit(L.elem[i]);

查找元素xx

for(i=0;i<L.lenght;i++)

if(L.elem[i]==x) break;

if(i<L.lenght)

找到;

else

未找到;

插入算法 ListInsert(&L,i,x)

1 表不满的情况下才能插入

2 合理的插入范围:1<=i<=L.lenght+1

3.步骤

第i至最后所有元素后移一个元素

在第i个元素位置插入元素XX

表长增加1

4 算法

bool ListInsert(Sqlist&L,int i,DataType x){

if(L.length==MASIZE||i<1||i>L.length+1)

return false;//失败 元素后移

for(j=L.length-1;j>=1;j--) //这里j为下标,从L.length-1到i-1

L.elem[j+1]=L.elem[j];

//插入x

L.elem[i-1]=x;

//表长增1

L.length++;

return true; //插入成功

}

删除算法 ListDelete(&L,i&x)

1 表非空

2 合理的删除范围 1<=i<=L.length

3 步骤

取出第i个元素

第i个元素之后的元素向前移动一个位置

表长减1

4 算法

bool ListDelete(Sqlist&L,int t,DataType&x)

{

if(L.length==0||i<1||i>L.lenght)

return false; //失败

x=L.elem[i-1];

for(j=i;j<L.length;j++)

L.elem[j-1]=L.elem[j];

L.length--;

return ture; //删除成功

}

单链表-----线性表的链式存储结构之一

概念:线性链表,单链表,结点;数据域,指针域;头指针,头结点。

特点:用指针表示数据之间的逻辑关系(逻辑相邻的元素物理位置不一定相邻)

定义类型:数据+指针

typedef struct LNode{

DataType data;

struct LNode*next;

}LNode, *LinkList;

基本形态

1 单链表空

条件:L->next==0

2 单链表不空

条件:L->next!==0

基本算法 遍历:

1 顺序访问所有元素

p=L->next;

while(p!==NULL){

visit(p->data);

p=p->next;

}

2 查找元素X

LinkList Find(LinkList L,DataType x)

{

p=L->next;

while(p!=NULL){

if(p->data==x) return p; //找到x

p=p->next;

}

return NULL; //未找到

}

3 查找第i个元素

LinkList Get(LinkList L,int i)

{

p=L->next;j=1;

while(p&&j<i){

p=p->next;j++;

}

if(p&&j==i)return p;

else return 0;

}

4 查找第i-1个元素

p=L; j=0;

while (p&&j<i-1){

p=p->next;j++;

}

if(p&&j==i-1)return p;

else return 0;

插入算法 ListInsert(&L,i,x)

思路 先查找到i-1个元素

若找到,在其后插入新结点

bool ListInsert(LinkList &L,int i,DataType x)

{

//查找第i-1个元素p

p=L;j=0;

while(p&&j<i-1){

p=p->next;j++;

}//若找到,在p后插入x

if(p&&j==i-1){

s=(LinkList)malloc(sizeof(Node));

s->data=x;

s->next=p->next;

p->next=s;

return ture;

}

else

return false;

}

删除算法 ListDelete(&L,i,&x)

思路

先查找第i-1个元素

若找到且其后存在第i个元素,则用x返回数据,并删除之

//删除算法

if(p&&j==i-1&&p->next){

s=p->next;

p->next=s->next;

x=s->data;

fress(s);

return ture;

}

else

return false;

建立链表的2种方法

思路

建立空表(头结点)

一次插入数据结点(每一次插入尾的(a1,a2,a3...an),每次插入头得(an,....a2,a1)).

1 顺序建表

2 逆序建表

循环链表

特点:最后一个结点的指针指向头结点

类型定义:同单链表 数据+指针

形态:空表:L-next==L 非空表

与单链表的关系

判断表尾的方法不同:单链表用P==NULL;循环链表用P==L; 其余操作相同

双向循环链表

特点:一个结点包括指向后继next和指向前驱的prior两个指针,两个方向又分别构成循环链表。

最大不同:前驱容易求得 判断表尾的方法与循环链表相同:P==L 插入和删除需要修改两个方向的指针

总结:需要反复插入,删除 采用链表合适;

需要反复提取,很少插入删除采用顺序合适

---------------------- 拖走FM----期待与您交流!
--------

收音机,电台,网上电台,广播,在线广播,网络广播,广播电台,网络电台,在线电台,电台在线收听,广播电台在线收听,网络电台在线收听,在线收听电台,fm收音机,网络收音机,广播下载,在线收音机,收音机软件下载,电台软件下载,网络收音机下载--------------

---------------------- 拖走FM----期待与您交流!
--------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: