数据结构与算法

本文详细介绍了数据结构的逻辑结构和物理结构,包括线性结构、树形结构、图形结构,以及顺序存储结构和链式存储结构。同时,阐述了算法的概念和与数据结构的关系,强调算法在解决问题中的重要性。在数据结构的三个级别中,列举了各种常见的数据结构,如静态数组、动态数组、栈等。文章还讨论了算法的时间复杂度,探讨了影响算法运行时间的因素。

第一章 、概述

1.1 数据结构的简述

数据元素相互之间的关系称为结构。数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据结构包括三方面的内容:逻辑结构、存储结构和数据的运算。数据的逻辑结构和存储结构是密不可分的两个方面,一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。

1.2算法的简述

算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。

1.3数据结构与算法的关系

程序 = 数据结构 + 算法

数据结构只是静态的描述了数据元素之间的关系。高效的程序需要在数据结构的基础上设计和选择算法

总结:算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体

1.4数据结构的三个级别

基础结构

线性表、栈、队列 双端栈、循环队列、双端队列 单向循环链表、双向循环链表 二分搜索树、最小堆/最大堆

进阶结构

Trie前缀树、线段树、并查集 AVL平衡树、哈希表

高级结构

2-3树、红黑树、B树、B+树、 多维数组、树状数组、伸展树 后缀树、树链剖分与动态树

1.5逻辑结构

(1)线性结构:线性结构中的数据元素之间是一对一的关系

(2)树形结构:树形结构中的数据元素之间存在一种一对多的层次关系

(3)图形结构:图形结构的数据元素是多对多的关系

 1.6物理结构

(1)顺序存储结构:开辟一组连续的空间存储数据 通常用数组来实现,数组中空间本身是连续的,保证了数据之间的关系

(2)链式存储结构:开辟一组随机的空间存储数据 通常用节点来实现,节点不仅要存储数据还要存储下一个节点的位置以保证数据之间的关系

 1.7算法概述

1.7.1算法的运行时间多少的因素

(1)算法的策略和方法

(2)编译代码的质量

(3)问题的大小

(4)机器指令的执行速度

1.7.2算法时间复杂度

算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n))。它表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度。简称时间复杂度。其中f(n)是问题规模n的某个函数

(1)常数阶 O(1)

无循环、无递归、与问题输入规模N无关的、逐行执行的代码

int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = 5;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);

(2)线性阶O(n)

与问题输入规模有关的,主要是一层循环的代码,多个一层循环可以并列但不能包含

int N = 10;
for (int i = 1; i <= N; i++) {
    System.out.println(i);
}
for (int i = 1; i <= N; i++) {
    System.out.println(i);
}

 (3)线性阶O(n+m)

和线性阶O(n)一样,只不过我们有两种数据的输入规模

int N = 10;
int M = 20;
for (int i = 1; i <= N; i++) {
    System.out.println(i);
}
for 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值