01数据结构与算法

 

 

概述

数据结构,就是数据之间的结构关系,或者理解成数据元素相互之间存在的一种或多种特定关系的集合。
分为逻辑结构和物理结构。

逻辑结构
指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后关系,而与他们在计算机中的存储位置无关。逻辑结构分为以下四类:
1.集合结构
集合结构中的数据元素同属于一个集合,他们之间是并列的关系,除此之外没有其他关系。
2.线性结构
线性结构中的元素存在一对一的相互关系
3.树形结构
树形结构中的元素存在一对多的相互关系。
4.图形结构
图形结构中的元素存在多对多的相互关系。

物理结构
又叫存储结构,指数据的逻辑结构在计算机内存存储空间的存放形式。通俗的讲,物理结构研究的是数据在存储器中存放的形式。
数据在内存中的存储结构,也就是物理结构,分为两种:顺序存储结构和链式存储结构。
顺序存储结构
是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。数组就是顺序存储结构的典型代表

链式存储结构
是把数据元素存放在内存中的任意存储单元里,也就是可以把数据存放在内存的各个位置。这些数据在内存中的地址可以是连续的,也可以是不连续的。
和顺序存储结构不同的是,链式存储结构的数据元素之间是通过指针来连接的,我们可以通使用指针来找到某个数据元素的位置,然后对这个数据元素进行一些操作。

顺序存储结构和链式存储结构的区别
以去银行取钱打比方,顺序存储结构就相当于,所有的客户照先来后到的顺序序的的坐在大厅的椅子上;
而链式存储结构相当于,所的客户只要一到银行,大堂经理就给他们每人一个号码,然后他们可以随便坐在哪个椅子上,
而每个客户手里的号码就相当于指针,当前的指针指向下一个存储空间,这样,所有不连续的空间就可以被有顺序的按照线性连接在一起了。



分类

一、线性表

1、数组Array

2、链表Linked List

链表被广泛用在各种语言的集合框架中.
链表是一张表,元素在内存中不一定相邻,并且每个元素都可带有指向另一个元素的指针.链表有单项链表,双向链表,循环链表。

链表失去了数组随机读取的优点,增加了节点的指针域,空间开销比较大https://www.cnblogs.com/wing011203/archive/2013/04/09/3010985.html

二、栈与队列

1、队列Queue

线性结构,特点是在某一端添加数据,在另一端删除数据,遵循先进先出。


在 现实生活中Queue的应用也很广泛,最广泛的就是排队了,先来后到,先来的先办事。比如我们的播放器上的播放列表,我们的数据流对象,异步的数据传输结 构(文件IO,管道通讯,套接字等);还有一些解决对共享资源的冲突访问,比如打印机的打印队列等。消息队列等。交通状况模拟,呼叫中心用户等待的时间的 模拟等等


2、栈Stack

线性结构,特点是只能在某一端添加或删除数据,遵循先进后出的原则。


栈这种数据结构用途很广泛,比如编译器中的词法分析器、Java虚拟机、软件中的撤销操作、浏览器中的回退操作,编译器中的函数调用实现等等。 


队列和栈都可以通过数据和链表实现.

https://www.cnblogs.com/yangecnu/p/Introduction-Stack-and-Queue.html


三、树与二叉树

1、树Tree

https://www.cnblogs.com/maybe2030/p/4732377.html


2、二叉树

树的遍历方法:先序遍历、中序遍历、后序遍历

深度遍历,广度遍历

二叉树比较经典的有哈夫曼编码问题,二叉堆等问题;

哈夫曼问题就是要让频率高的节点编码最短,也就是要节点在哈夫曼树中的深度最小。
https://www.cnblogs.com/songwenjie/p/8955856.html


四、图Graph


五、其他

1、散列表Hash

2、堆Heap

可以被看成一棵树的数组对象



时间复杂度

O(1) 代表操作与数据量没有关系,是一个固定时间的操作,比如说四则运算

O(N) 对于一个算法来说,可能会计算出操作次数为aN+1,N代表数据量


 

posted @ 2015-10-29 20:31  illday  阅读(195)  评论(0编辑  收藏  举报