数据结构域算法基础 一

-------------------------------------------------------------------简介-----------------------------------------------------------------------------

1.数据结构是指数据在计算机内存空间或磁盘中的组织形式

2.正确选择数据结构会使程序的效率大大提高

3.数据结构的例子有数组,栈和链表

4.算法算是完成特定任务的过程

5.在Java中,算法经常通过类的方法实现

6.数据库是指由许多类似记录组成的数据存储的集合



-------------------------------------------------------------------数组-----------------------------------------------------------------------------

1.创建数组

Java中有两种数据类型:基本类型(如int 和 double) 和对象类型。在许多编程语言中(甚至是有些面向对象语言,如c++),数组也是基本类型,但在Java中把他们当作对象来对待

方式一:

int[ ] intArray;

intArray = new int[100];

方式二:

int[ ] intArray = new int[100];

方法三:

int intArray[ ] = new int[100];

2.数组的特性:

2.1, 数组一旦创建,大小不可改变

2.2数组访问是通过下标来访问,且下标从0开始

例:temp = intArray[5];

intArray[4] = 88;

如果访问小于0或比数组大小大的数据项,程序会出现 Array Index Out of Bounds(数组下标越界)的运行时异常

2.3初始化

当创建数组后,如果不另行指定,则数组会自动初始化为空,当访问一个空的数组是,程序会出现Null Pointer Assignment(空指针赋值)的运行时错误

例:int[ ] intArray = { 0,5,4,6,1,5,8 };

int[5] = 8;

2.4 lowArray类和lowArrayAPP类

lowArray.Java中实际上是将一个普通的Java数组封装进lowArray类中,类中的数组隐藏了起来,他是私有的,所以只有lowArray类中的方法才可以访问他,lowArray中有三个方法,setElem()和getElem(),分别用来插入和检索一个数据项,另外一个是构造函数,用来创建一个特定大小的空数组。

lowArrayAPP创建一个lowArray类的对象并用他存储和操作数据,可以将lowArray想象成工具,lowArrayAPP是工具的使用者,现在程序被划分为两个各自扮演不同角色的类,这对于编写一个面向对象的程序来说是关键的第一步

用来存储数据对象的类有时被称为容器类(container class),例如在lowArray.java中lowArray类。通常容器类不仅存储数据,并且提供访问数据的方法和其他诸如排序等复杂的操作

2.5 线性查找

在缺省情况下是线性查找。当查找到的数据比当前数据大的时候,终止查询

       二分查找

当使用二分查找时就体现有序数组的好处,这种查找比线性查找快很多,尤其对大数组来说更为显著

       有序数组

优点:比无序数组快多了,不好的方面是在插入操作中所有靠后的数据都需要移动以腾开空间,所以速度较慢,有序数组和无序数组中的删除操作都很慢,这是因为数据项必须向前移动来填补已删除数据项的洞。有序数组在查找频繁的情况下十分有用,但插入和删除较为频繁时,无法高效的工作。

2.6 对数

指数函数的反函数 即a =log b N

b a =N

2.7存储对象


2.8大O表示法

在计算机科学中,这种粗劣的度量方法叫做大O表示法

无序数组的插入:常数

是目前唯一一个与数组中的数据项个体无关的算法,新数据项总被放在下一个有空的地方,所以每次插入的时间相同,我们可以说像无序数组插入一个数据项的时间T是一个常数K

线性查找:与n成正比

在数组数据项的查找中,发现寻找特定数据项所需比较次数为数据项总数的一半,因此设n为数据项总数,搜索时间T与n的一半成正比:

T=K*N/2

二分查找:与log(N)成正比

不要常数

2.9为什么不用数组表示一切

数组的缺点:在一个无序数组中可以很快的插入,但是查找却要花费较慢的时间

在一个有序的数组中可以查找的很快,但插入却花费时间

数组被new创建后,大小尺寸是固定的,但通常在开始设计程序时并不知道会有多少数据将会放入数组中,所以需要猜他的大小,如果猜的过大,会使数组中的某些单元永远不会被填充二浪费空间,如果猜的过小,会发生数组的溢出,最好的情况是会像用户发送警告,最坏的情况则会导致程序崩溃


小结:Java中的数组是对象,由new操作符创建

无序数组可以提供快速的插入,但查找和删除很慢

将数组封装到类中可以保护数组不被随意更改

类的接口由类用户可访问的方法(有时还有字段组成)

类的接口被设计成使类用户的操作更加简单

有序数组可以使用二分查找

以b为底a的对数(大概)是在结果小于1之前用b除a的次数

线性查找需要的时间与数组中数据项的个数成正比

大O表示法为比较算法的速度提供了一种方便的方法

O(1)级时间的算法是最好的,O(logN)次之,O(N)一般,O(N2)最差



-------------------------------------------------------------------简单排序---------------------------------------------------------------------------

3.1冒泡排序

int[] num = { 1,4,7,5,6};

for(int i = 0;i<num.length;i++){

for(int j = 0 ;j<num.length-i;J++){

if(num[i] > num[j]){

int sum = num[i];

num[i] = num[j];

num[j] = sum;

}

}

}

3.2选择排序

选择排序改进了冒泡排序,将必要的交换次数从O(N2)减少到O(N)。不幸的是比较次数仍保持在O(N2).然而,选择排序仍然为大记录量的排序提出了一个非常重要的改进,

例:

3.3插入排序:

在大多数情况下,插入算法是基本的排序算法里最好的一种,虽然插入排序算法仍然需要O(N2)的时间,但是一般情况下,它要比冒泡排序快一倍,比选择排序还要快一点。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C++ STL(Standard Template Library)是一种功能强大的库,提供了一套丰富的数据结构算法实现。在余文溪的《C++ STL数据结构算法实现》这本PDF书中,详细介绍了STL的各种数据结构算法的实现。 首先,STL提供了几种基本的数据结构,例如vector(动态数组)、list(双向链表)、deque(双端队列)、set(集合)、map(映射)等。这些数据结构在STL中都有相应的实现和操作函数,能够方便地进行插入、删除、查找等操作。 此外,STL还提供了一些算法,包括排序、查找、遍历等等。这些算法可以应用于STL的各种数据结构上,提供了一种高效且易用的方式来处理数据。例如,STL中提供了排序算法sort,可以对vector、list等容器进行排序操作;还有查找算法find,可以在set、map等容器中进行查找操作。 在《C++ STL数据结构算法实现》中,余文溪详细阐述了STL的实现原理和内部细节,帮助读者深入理解STL的工作原理。通过学习这本书,读者可以了解到STL的设计思想、使用方法和性能特点,从而能够更好地应用STL解决问题。 总而言之,STL提供了一套强大的数据结构算法实现,通过余文溪的《C++ STL数据结构算法实现》这本PDF书,读者可以深入了解STL的使用方法和内部原理,提升编程能力。 ### 回答2: C++ STL(Standard Template Library,标准模板库)是C++标准库的一部分,为我们提供了丰富的数据结构算法实现。余文溪编写的《C++ STL 数据结构算法实现》PDF是一本介绍STL的经典教材。 STL包含了很多常用的数据结构,例如向量(vector)、链表(list)、集合(set)和映射(map)等。这些数据结构都已经被封装好,通过STL可以方便地进行插入、删除、查找等操作。同时,STL还提供了强大的算法库,例如排序、查找、拷贝和逆序等。使用STL的数据结构算法,可以极大地提高我们的编程效率。 《C++ STL 数据结构算法实现》是一本很好的学习STL的教材。其中,余文溪详细地介绍了STL的各种数据结构算法,通过代码示例和讲解,深入浅出地帮助读者理解STL的使用方法。这本教材适合初学者和有一定基础的读者阅读,对于了解STL的基本概念和使用方法非常有帮助。 在读完《C++ STL 数据结构算法实现》后,读者将能够熟练使用STL提供的数据结构算法,加快自己的编程效率。同时,通过掌握STL的使用,读者也能更好地理解C++标准库的设计思想和使用方法,提升自己的编程水平。 总之,《C++ STL 数据结构算法实现》是值得一读的一本STL教材,能够帮助我们更好地学习和应用STL,提高我们的编程效率和水平。 ### 回答3: STL(Standard Template Library)是C++的标准库之一,提供了丰富的数据结构算法实现。而余文溪编写的《C++ STL数据结构算法实现》这本PDF书籍主要介绍了STL的使用方法和内部实现原理。 该书首先介绍了STL的基本概念和使用方法,包括迭代器、容器、算法等方面的内容。通过对各种容器(如vector、list、set、map等)和算法(如排序、查找、合并等)的讲解,读者可以了解到STL的强大功能和高效性。 此外,余文溪在书中也深入探讨了STL的内部实现原理。他通过剖析STL的源代码,详细解释了其中的数据结构算法实现细节。这对于希望深入理解STL底层机制的读者来说,是非常有价值的。 《C++ STL数据结构算法实现》这本书的另一个特点是提供了大量的示例代码和实战练习。通过实际编写代码和完成练习,读者可以巩固所学知识,并提升自己的编程能力。 总之,余文溪的这本PDF书籍对于想要掌握STL的使用方法和底层实现原理的C++程序员来说,是一本非常实用的工具书。无论是初学者还是有一定经验的开发者,都可以从中获得很多有价值的知识和技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值