数据结构一些题目

一、单纯的数据结构

1.栈和队列共同特点:只允许在端点处插入和删除元素

2.线性表:

顺序存储结构:查找快O(1),增删慢O(n),好处是便于查找

链式存储结构:查找慢O(n),增删快O(1)。链表内存中可用的存储单元的地址可以是连续的也可以是不连续的。好处是便于插入和删除操作。

常考:

单链表中,增加头结点的目的:方便运算的实现

循环链表的优点:从表中任一结点出发都能访问到整个链表。

非空的循环单链表head的尾结点(p指向)满足:p->next=head

线性表:除了第一个和最后一个元素,其余每个元素有且只有一个直接前驱和直接后继。

线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的。


与单向链表相比,双向链表的优点之一是:更容易访问相邻结点。

3.数据的存储结构:数据的逻辑结构在计算机中的表示

数据的逻辑结构:反映数据元素之间逻辑关系的数据结构

根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为:线性结构和非线性结构

4.栈:是先进后出的线性表

数据结构中具有记忆功能的是栈。

由两个栈共享一个存储空间的好处:节省存储空间,降低上溢发生的机率。

栈的基本运算:入栈、退栈与读栈顶元素



5.队列:先进先出的线性表

递归算法一般用队列实现

队列的基本运算:入队和出队。


6.线性结构:其特点是数据元素之间存在一对一的线性关系。线性结构拥有两种不同的存储结构,即顺序存储结构和链式存储结构。

线性表、队列、栈属于线性结构。但队列和栈是受限的线性结构。

二叉树属于非线性数据结构


7、树:

在第n层的二叉树上总节点数最多是2^n-1

深度为n的满二叉树,叶子节点个数为2^(n-1)

完全二叉树的总结点数为N,N为奇数,则叶子节点数位(N+1)/2;N为偶数,则叶子节点数位N/2


8、串的长度是:串中所含字符的个数

9.图:

10。常用的存储结构:顺序、链接、索引等存储结构

11、数组和链表的区别。(很简单,但是很常考,记得要回答全面)

C++语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小。而在实际应用中,用户使用数组之前无法确定数组的大小,只能够将数组定义成足够大小,这样数组的空间可能不被使用,从而造成内存空间的浪费。链表是一种常见的数据组织形式,他采用动态分配内存的形式实现。需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造成内存空间的浪费。

从逻辑结构上来看,数组必须实现定于固定的长度,不能适应数据动态增减的情况,即数组的大小一旦定义就不能改变。当数据增加是,可能超过原先定义的元素的个数;当数据减少时,造成内存浪费;链表动态进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。

从内存存储的角度看;数组从栈中分配空间(用new则在堆上创建),对程序员方便快速,但是自由度小;链表从堆中分配空间,自由度大但是申请管理比较麻烦。

从访问方式类看,数组在内存中是连续的存储,因此可以利用下标索引进行访问;链表是链式存储结构,在访问元素时候只能够通过线性方式由前到后顺序的访问,所以访问效率比数组要低。


二、数据结构与算法:

(一)排序算法:

1、插入排序:

直接插入排序:从后往前找合适的位置,直接插入

二分插入排序:用二分法找合适的位置,插入

希尔排序:

2、选择排序:

简单选择排序:每次选最小的或者最大的换到第一位

堆排序:二叉树然后换换

3、交换排序:

冒泡排序:比较两个相邻的数之间的关系与排序要求是否一致,不一致则交换

快速排序:每轮以第一个数作为基准,从后往前找比基准小的数,进行交换,再从前往后找比基准大的数进行交换,直到基准所在的位置前面的数都比他小,后面的数都比他大。

4、归并排序:已经排好序的2个或以上的数组再进行归并排序

5、基数排序:所有数值统一为同样的数位长度,数位较短的前面补0,从最低位开始排序到最高位。


最基本的是冒泡排序,选择排序,插入排序要可以很快地用代码实现。这些主要考察你的实际编码能力。堆排序,归并排序,快速排序这些算法需要熟悉主要思想,和需要注意的细节地方。

(二)查找算法:

二分查找


图之深度优先与广度优先:

深度优先:从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。 若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。

无向图的深度优先:

ADBDFGE

有向图的深度优先:

ABCEDFG

广度优先:又称为"宽度优先搜索"或"横向优先搜索",简称BFS。

从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使得“先被访问的顶点的邻接点先于后被访问的顶点的邻接点被访问,直至图中所有已被访问的顶点的邻接点都被访问到。如果此时图中尚有顶点未被访问,则需要另选一个未曾被访问过的顶点作为新的起始点,重复上述过程,直至图中所有顶点都被访问到为止。

无向图的广度优先:

ACDFBGE

有向图的广度优先:

ABCEFDG

注意!:1、同层的则按字母顺序优先;2、如果是从邻接图演变的,邻接图是有顺序的,按那个顺序。

148、求图的拓扑序列(只有有向图有):找出图中无前驱节点的节点,依次输出删去。一个图的拓扑序列可以有多种。

深度优先和拓扑序列可以判断出一个有向图是否有环。

你可能感兴趣的:(数据结构一些题目)