数据结构习题之简答题
数据结构定义
数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。
逻辑结构的有哪四种?
1.集合结构 2.线性结构 3.树形结构 4.图形结构
数据结构的特性
数组:优点是插入快,如果知道下标,可以非常快地存取。缺点是查找慢,删除慢,大小固定。
有序数组:优点是比无序的数据查找快。缺点是删除和插入慢,大小固定。
栈:优点是提供后进先出方式的存取。缺点是存取其他项很慢。
队列:提供先进先出方式的存取。缺点是存取其他项很慢。
链表:优点是插入快,删除快。缺点是查找慢。
二叉树:优点是查找、插入、删除都快(如果树保持平衡)。缺点是删除算法复杂。
红-黑树:查找、插入、删除都快。树总是平衡的。缺点是算法复杂。
2-3-4树:优点是查找、插入、删除都快。树总是平衡的。类似的树对磁盘存储有用。缺点是算法复杂。
哈希表:优点是如果关键字已知则存取极快。插入快。缺点是删除慢,如果不知道关键字则存取很慢,对存储空间使用不充分。
堆:优点是插入、删除快,对最大数据项的存取很快。缺点是对其他数据项存取慢。
图:优点是对现实世界建模。缺点是有些算法且复杂。
存储结构由哪两种基本的存储方法实现?
主要分顺序存储结构和链式存储结构两种。
顺序表和链表的比较?
一.顺序表:
1.1.从空间角度:
分配方式:静态分配
存储密度:为1
1.2.从时间角度:
存取方式:随机存取
操作:插入删除:O(N) ; 按序访问:O(1);
二.链表:
2.1.从空间角度:
分配方式:动态分配
存储密度:小于1
2.2.从时间角度:
存取方式:顺序存取
栈和队列的异同点?
1) 栈与队列的相同点:
都是线性结构。
插入操作都是限定在表尾进行。
都可以通过顺序结构和链式结构实现。、
插入与删除的时间复杂度都是O(1),在空间复杂度上两者也一样。
多链栈和多链队列的管理模式可以相同。
2) 栈与队列的不同点:
删除数据元素的位置不同,栈的删除操作在表尾进行,队列的删除操作在表头进行。
应用场景不同;常见栈的应用场景包括括号问题的求解,表达式的转换和求值,函数调用和递归实现,深度优先搜索遍历等;常见的队列的应用场景包括计算机系统中各种资源的管理,消息缓冲器的管理和广度优先搜索遍历等。
顺序栈能够实现多栈空间共享,而顺序队列不能。
衡量算法的基本标准?
时间复杂度:程序执行的次数
空间复杂度:程序执行过程中大概所占用的最大内存
难易程度
健壮性
什么是二叉树的遍历?二叉树的三种遍历方法是什么?三种遍历方法的根节点、左子树、右子树的位置关系是什么,用右箭头表示出来。
遍历二叉树的所有结点且仅访问一次。按照根节点位置的不同分为前序遍历,中序遍历,后序遍历。
前序遍历:根节点->左子树->右子树(根节点在前面)
中序遍历:左子树->根节点->右子树(根节点在中间)
后序遍历:左子树->右子树->根节点(根节点在后边)
数据:数据是信息的载体,信息是数据的内涵。
数据元素:数据的基本单位。
数据项:构成数据元素不可分割的最小单位。
数据对象:性质相同的数据元素的集合,是数据的子集。
数据类型:一个值的集合以及定义在此集合上一组操作的总称。原子类型、结构类型、抽象数据类型ADT。
抽象数据类型ADT:只关系逻辑结构,无需关系具体实现、存储结构。由数据对象、数据关系、基本操作组成。
数据结构:相互之间存在一种或多种特定关系的数据元素的集合。数据结构=数据元素+数据关系。
数据结构三要素:逻辑结构、物理结构、数据运算。
存储结构:数据结构在计算机上的表示,顺序存储、链式存储、索引存储、散列存储。
数据运算:运算的定义依赖于逻辑结构,运算的实现依赖于物理结构。
算法:特定问题求解步骤的描述。
算法五特性:确定性、可行性、有穷性、输入、输出。
优质算法特性:正确性、健壮性、可读性、高效率、低存储(时空复杂度低)。
算法分析:时间复杂度、空间复杂度、稳定性。
S(n)=O(1):算法原地工作指算法所需要的辅助空间为常量。
程序=数据结构+算法:数据结构是要处理的信息,算法是处理信息的步骤。
顺序表:线性表的顺序存储,逻辑顺序和物理顺序相同。随机访问,存储密度高,插入删除需要移动大量元素。静态顺序表、动态顺序表。
静态线性表:数组、大小固定、少则内存溢出、多则资源浪费。
动态线性表:动态分配存储空间。
链表:线性表的链式表示,不要求存储地址联系,失去了随机访问的特性。适合插入删除。单链表、双链表、循环链表、静态链表。
单链表:链表结点存放后继指针。访问后继结点时间复杂度为O(1),前驱为O(n)。
双链表:链表结点存放前驱和后继指针,这样就克服了单链表不能从后往前遍历的缺陷。prior、next
循环链表:循环单链表、循环双链表。循环单链表需要将尾结点指针指向头结点,这样就可以形成环。循环双链表还需要将头结点的prior指针指向尾结点。
静态链表:借助数组实现的链表。
线性表基本操作:创销、CRUD、判空、判表长、输出。
线性结构和非线性结构区别:线性结构除第一个和最后一个节点外,其余结点有唯一前驱和后继,第一个节点无前驱,最后一个结点无后继,结点之间是一对一关系。非线性结构结点前驱后继不具有唯一性,结点之间关系为一对多或者多对多。
顺序存储结构特点:存储密度大,空间利用率高;随机访问,随机存取;不适合插入删除操作,因为需要移动大量元素;预分配存储空间难以确定。
顺序存储结构与链式存储结构比较
顺序存储结构 | 链式存储结构 | |
优点 | 存储密度高、随机访问、随机存取 | 插入删除方便、动态分配存储空间 |
缺点 | 不适合插入删除,因为需要移动大量元素;预分配存储空间难以确定 | 存储密度小、访问需要从头遍历链表 |
顺序表和链表的比较
区别 | 顺序表 | 链表 |
存储结构 | 顺序存储 | 链式存储 |
存取/访问速率 | 随机存取,随机访问,方便O(1) | 不方便,需要遍历O(n) |
存储密度 | 高 | 低 |
插入删除 | 不方便,需要移动大量元素 | 方便,修改指针 |
数组和链表的比较
区别 | 数组 | 链表 |
分配空间 | 静态分配/栈分配 | 动态分配/堆分配 |
访问速率 | 根据数组下标直接访问 | 从头遍历 |
插入删除 | 不方便,需要移动大量元素 | 方便,只需修改指针 |
头指针和头结点区分
区分 | 头指针 | 头结点 |
概念 | 指向链表第一个结点的指针 | 带头结点链表的第一个结点,是链表在表头附加的结点 |
是否必须 | 是 | 否,只是为了统一操作 |
引入头结点作用 | 头指针就是链表名字、标记链表 | 空表非空表头结点都指向头结点/统一了第一个数据结点和其余结点的操作 |