A. CSharp 笔试题, 哪位能提供一些 C#(数据结构和算法)方面的面试题 笔试题资源,谢谢
1.列出所有可用于两个页面之间传递参数的方法。
2.打开一个HTML页面,要自动提交页面的一个form,如何实现?请简单写出相关的页面代码(包括form的主要代码)
3.C#的类中,函数Public,Private,Protect,internal限定符各有什么区别?
4.你对.net的GC的理解,不能超过300字。
5.请写一个查询语句:从user表中取出name列中的起始字符是“北京”的全部记录
6.请你简单的说明数据库建立索引的优缺点
7.如果禁用了cookie,是否会影响到session的使用?原因?
8.C#中Finalize,Dispose有什么不同?
9.最大公约数
既能被两个整数整除的最大整数,例如,24与15两个数的最大公约数为3.求最大公约数可以用求余法来实现。即用两个整数中最大的整数除以最小的数求余数,然后使用除数除以余数求余,直到余数为0时,之前的除数也就是两个数的最大公约数。
10.求素数的程序
A.The algorithm is quite simple.Given an array of integers starting at 2.Cross out all multiples of 2.Find the next uncrossed integer,and cross out all of its multiples.Repeat until you have passed the square root of the maximum value.
A.请翻译上述文字。
B.编程 要求输入一个正整数(可以写死在程序中),返回小于这个数的所有素数。
.net工程师面试题:
1)网站发布的时候后台.cs文件会变成.dll文件
问:如何让html文件变成空白?
2)一个表中的name有很多重复
问1):如何只显示重复项?
问2):如何不显示重复项?
3)一个网站注册会员的时候信息将会很多,会需要“下一步”这样的页面跳转,请问当点击下一步的时候如何对上一页的信息进行保存(不用数据库)?
B. 数据结构考试重点
第一章 数据结构基本概念
1、基本概念:理解什么是数据、数据对象、数据元素、数据结构、数据的逻辑结构与物理结构、逻辑结构与物理结构间的关系。
2、面向对象概念:理解什么是数据类型、抽象数据类型、数据抽象和信息隐蔽原则。了解什么是面向对象。由于目前关于这个问题有许多说法,我们采用了一种最流行的说法,即Coad与Yourdon 给出的定义:面向对象 = 对象 + 类 + 继承 + 通信。
要点:
·抽象数据类型的封装性
·面向对象系统结构的稳定性
·面向对象方法着眼点在于应用问题所涉及的对象
3、数据结构的抽象层次:理解用对象类表示的各种数据结构
4、算法与算法分析:理解算法的定义、算法的特性、算法的时间代价、算法的空间代价。
要点:·算法与程序的不同之处需要从算法的特性来解释
·算法的正确性是最主要的要求
·算法的可读性是必须考虑的
·程序的程序步数的计算与算法的事前估计
·程序的时间代价是指算法的渐进时间复杂性度量
第二章 数组
1、作为抽象数据类型的数组:数组的定义、数组的按行顺序存储与按列顺序存储
要点:
·数组元素的存放地址计算
2、顺序表:顺序表的定义、搜索、插入与删除
要点:
·顺序表搜索算法、平均比较次数的计算
·插入与删除算法、平均移动次数的计算
3、多项式:多项式的定义
4、字符串:字符串的定义及其操作的实现
要点:
·串重载操作的定义与实现
第三章 链接表
1、单链表:单链表定义、相应操作的实现、单链表的游标类。
要点:
·单链表的两种定义方式(复合方式与嵌套方式)
·单链表的搜索算法与插入、删除算法
·单链表的递归与迭代算法
2、循环链表:单链表与循环链表的异同
3、双向链表:双向链表的搜索、插入与删除算法、链表带表头结点的优点
4、多项式的链接表示
第四章 栈与队列
1、栈:栈的特性、栈的基本运算
要点:
·栈的数组实现、栈的链表实现
·栈满及栈空条件、抽象数据类型中的先决条件与后置条件
2、栈的应用:用后缀表示计算表达式,中缀表示改后缀表示
3、队列:队列的特性、队列的基本运算
要点:
·队列的数组实现:循环队列中队头与队尾指针的表示,队满及队空条件
·队列的链表实现:链式队列中的队头与队尾指针的表示、
4、双向队列:双向队列的插入与删除算法
5、优先级队列:优先级队列的插入与删除算法
第五章 递归与广义表
1、递归:递归的定义、递归的数据结构、递归问题用递归过程求解
要点:·链表是递归的数据结构,可用递归过程求解有关链表的问题
2、递归实现时栈的应用
要点:·递归的分层(树形)表示:递归树
·递归深度(递归树的深度)与递归工作栈的关系
·单向递归与尾递归的迭代实现
3、广义表:广义表定义、广义表长度、广义表深度、广义表表头、广义表表尾
要点:
·用图形表示广义表的存储结构
·广义表的递归算法
第六章 树与森林
1、树:树的定义、树的基本运算
要点:
·树的分层定义是递归的
·树中结点个数与高度的关系
2、二叉树:二叉树定义、二叉树的基本运算
要点:
·二叉树性质、二叉树中结点个数与高度的关系、不同种类的二叉树棵数
·完全二叉树的顺序存储、完全二叉树的双亲、子女和兄弟的位置
·二叉树的前序·中序·后序·层次遍历
·前序
·中序
·后序的线索化二叉树、前驱与后继的查找方法
3、霍夫曼树:霍夫曼树的构造方法、霍夫曼编码、带权路径长度的计算
4、树的存储:树的广义表表示、树的双亲表示、树与二叉树的对应关系、树的先根·中根·后根·层次遍历。
5、堆:堆的定义、堆的插入与删除算法
要点:
·形成堆时用到的向下调整算法及形成堆时比较次数的上界估计
·堆插入时用到的向上调整算法
第七章 集合与搜索
1、集合的概念:集合的基本运算、集合的存储表示
要点:
·用位数组表示集合时集合基本运算的实现
·用有序链表表示集合时集合基本运算的实现
2、并查集:并查集定义、并查集的三种基本运算的实现
3、基本搜索方法
要点:
·对一般表的顺序搜索算法(包括有监视哨和没有监视哨)
·对有序顺序表的顺序搜索算法、用判定树(即扩充二叉搜索树)描述搜索,以及平均搜索长度(成功与不成功)的计算。
·对有序顺序表的折半搜索算法、用判定树(即扩充二叉搜索树)描述搜索,以及平均搜索长度(成功与不成功)的计算。
4、二叉搜索树:
要点:
·动态搜索树与静态搜索树的特性
·二叉搜索树的定义、二叉搜索树上的搜索算法、二叉搜索树搜索时的平均搜索长度(成功与不成功)的计算。
·AVL树结点上的平衡因子、AVL树的平衡旋转方法
·高度为h的AVL树上的最少结点个数与最多结点个数
· AVL树的搜索方法、插入与删除方法
第八章 图
1、图:图的定义与图的存储表示
要点:
·邻接矩阵表示(通常是稀疏矩阵)
·邻接表与逆邻接表表示
·邻接多重表(十字链表)表示
2、深度优先遍历与广度优先遍历
要点:
·生成树与生成树林的定义
·深度优先搜索是个递归的过程,而广度优先搜索是个非递归的过程
·为防止重复访问已经访问过的顶点,需要设置一个访问标志数组visited
3、图的连通性
要点:
·深度优先搜索可以遍历一个连通分量上的所有顶点
·对非连通图进行遍历,可以建立一个生成森林
·对强连通图进行遍历,可能建立一个生成森林
·关节点的计算和以最少的边构成重连通图
4、最小生成树
要点:
·对于连通网络、可用不会构成环路的权值最小的n-1条边构成最小生成树
·会画出用Kruskal算法及Prim算法构造最小生成树的过程
5、单源最短路径
要点:
·采用逐步求解的方式求某一顶点到其他顶点的最短路径
·要求每条边的权值必须大于零
6、活动网络
要点:
·拓扑排序、关键路径、关键活动、AOE网
·拓扑排序将一个偏序图转化为一个全序图。
·为实现拓扑排序,要建立一个栈,将所有入度为零的顶点进栈
·关键路径的计算
第九章 排序
1、基本概念:关键码、初始关键码排列、关键码比较次数、数据移动次数、稳定性、附加存储、内部排序、外部排序
2、插入排序:
要点:
·当待排序的关键码序列已经基本有序时,用直接插入排序最快
3、选择排序:
要点:
·用直接选择排序在一个待排序区间中选出最小的数据时,与区间第一个数据对调,而不是顺次后移。这导致方法不稳定。
·当在n个数据(n很大)中选出最小的5 ~ 8个数据时,锦标赛排序最快
·锦标赛排序的算法中将待排序的数据个数n补足到2的k次幂2k-1<n≤2k
·在堆排序中将待排序的数据组织成完全二叉树的顺序存储。
4、交换排序:
要点:
·快速排序是一个递归的排序方法
·当待排序关键码序列已经基本有序时,快速排序显着变慢。
5、二路归并排序:
要点:
·归并排序可以递归执行
·归并排序需要较多的附加存储。可以采用一种"推拉法"(参见教科书上习题)实现归并排序,算法的时间复杂度为O (n)、空间复杂度为O(1)
·归并排序对待排序关键码的初始排列不敏感,排序速度较稳定
6、外排序
要点:
·多路平衡归并排序的过程、I/O缓冲区个数的配置
·外排序的时间分析、利用败者树进行多路平衡归并
·利用置换选择方法生成不等长的初始归并段
·最佳归并树的构造及WPL的计算
第十章 索引与散列
1、线性索引:
要点:
·密集索引、稀疏索引、索引表计算
·基于属性查找建立倒排索引、单元式倒排表
2、动态搜索树
要点:
·平衡的m路搜索树的定义、搜索算法
·B树的定义、B树与平衡的m路搜索树的关系
·B树的插入(包括结点分裂)、删除(包括结点调整与合并)方法
·B树中结点个数与高度的关系
·B+树的定义、搜索、插入与删除的方法
3、散列表
要点:
·散列函数的比较
·装填因子 a 与平均搜索长度的关系,平均搜索长度与表长m及表中已有数据对象个数n的关系
·解决地址冲突的(闭散列)线性探查法的运用,平均探查次数的计算
·线性探查法的删除问题、散列表类的设计中必须为各地址设置三个状态
·线性探查法中的聚集问题
·解决地址冲突的(闭散列)双散列法的运用,平均探查次数的计算
·双散列法中再散列函数的设计要求与表长m互质,为此m设计为质数较宜
·解决地址冲突的(闭散列)二次散列法的运用,平均探查次数的计算
·注意:二次散列法中装填因子 a 与表长m的设置
·解决地址冲突的(开散列)链地址法的运用,平均探查次数的计算
C. 关于数据结构的题
三、单项选择题
( C )1. 数据结构中,与所使用的计算机无关的是数据的 结构;
A) 存储 B) 物理 C) 逻辑 D) 物理和存储
( C )2. 算法分析的目的是:
A) 找出数据结构的合理性 B) 研究算法中的输入和输出的关系
C) 分析算法的效率以求改进 D) 分析算法的易懂性和文档性
( A )3. 算法分析的两个主要方面是:
A) 空间复杂性和时间复杂性 B) 正确性和简明性
C) 可读性和文档性 D) 数据复杂性和程序复杂性
( C )4. 计算机算法指的是:
A) 计算方法 B) 排序方法 C) 解决问题的有限运算序列 D) 调度方法
( C )5. 计算机算法必须具备输入、输出和
等5个特性。
A) 可行性、可移植性和可扩充性 B) 可行性、确定性和有穷性
C) 确定性、有穷性和稳定性 D) 易读性、稳定性和安全性
( C )6.数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为:
(A)存储结构 (B)逻辑结构 (C)顺序存储结构 (D)链式存储结构
( A )7. 一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是
(A)110 (B)108 (C)100 (D)120
( C )8. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动 个元素
(A)8 (B)63.5 (C)63 (D)7
( AF )9. 链接存储的存储结构所占存储空间:
(A) 分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
(B) 只有一部分,存放结点值
(C) 只有一部分,存储表示结点间关系的指针
(D) 分两部分,一部分存放结点值,另一部分存放结点所占单元数
(E)一定是不连续的 (F)连续或不连续都可以
( B )10. 线性表L在 情况下适用于使用链式结构实现。
(A)需经常修改L中的结点值 (B)需不断对L进行删除插入
(C)L中含有大量的结点 (D)L中结点结构复杂
( A )11. 栈中元素的进出原则是
A.先进先出 B.后进先出 C.栈空则进 D.栈满则出
( C )12. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为
A.i B.n-i C.n-i+1 D.不确定
四、简答题
1. 试比较顺序存储结构和链式存储结构的优缺点。分别在什么情况下用二者更适合?
顺序存储结构的主要优点是:
节省存储空间,结点之间的逻辑关系没有占用额外的存储空间。
可实现对结点的随机存取。
主要缺点是:在作插入或删除操作时,可能需移动大量元素。
链式存储结构的主要优点是:
逻辑上相邻的节点物理上不必相邻;插入、删除灵活 (不必移动节点,只要改变节点中的指针)。
缺点是:
比顺序存储结构的存储密度小;查找结点时链式存储要比顺序存储慢。
2. 顺序队的“假溢出”是怎样产生的?如何知道循环队列是空还是满?
系统作为队列用的存储区还没有满,但队列却发生了溢出,我们把这种现象称为"假溢出"。
判断是空是满的方法为:Q->rear=(Q->rear+1) % QueueSize;
3. 设循环队列的容量为40(序号从0到39),现经过一系列的入队和出队运算后,有
① front=11,rear=19; ② front=19,rear=11;问在这两种情况下,循环队列中各有元素多少个?
第一种情况为:N=Q->rear-Q->front=8
第二种情况为:N=Q->rear+40-Q->front=32
D. 算法与数据结构的问题,急!!!!!!!!!!!
现考虑一将随后可能用到的多个行星名称(名称皆唯一)存储在一目录中的问题。针对后续的两个使用场景,请比较并对比数组、二叉查找树、avl-树和使用线性hash函数的hash表,请指出你为达成令下列两种情况下插入过程最快的目的所选择的数据结构。
i)从小说中选择100000个词插入,其中10000个词是不重复的(译者按:即不按字母序随机插入)
ii)从字典中选择50000个不同的词插入,这些词大部分都是排序的
你只需关心速度性能即可,可暂不考虑内存性能。供参考,log2(10000)约等于13,log2(50000)约等于16,log2(100000)约等于17.
注意:
“比较”意即讨论不同数据结构的相似特点
“对比”则是请讨论不同数据结构的不同之意。
这题不是选1和2那个方法,1和2是不同场景,第一个是随机信息的插入,且90%数据是可不用插入的,第二个是有序信息的插入。
这题蛮麻烦,不能保证答对,简单分析下好了,对于插入操作,基本上都是两个过程“查找”(顺便也决定了插入的位置)和“插入”:
1,数组:得分两种情况
a,非排序数组,则查找时间复杂度为O(N),插入复杂度为O(1),总是插入至最末尾
b,排序数组,使用二分查找,查找时间复杂度为O(log2(N)),插入的话,大部分情况需要移动内存,题中不考虑内存性能,则时间复杂度为O(1)
2,二叉查找树,也得分两种情况
a,平衡的,则查找复杂度O(log2(N)),插入基本上是O(1)
b,非平衡,虽然平均查找复杂度还是O(log2(N)),但实际大多数情况都比这个值要大,插入基本O(1)
3,avl-树,这种树实质上是也是一种二叉查找树,它的名字是“自平衡二叉查找树”,因此它的任何操作都保证他是平衡二叉查找树,插入时间复杂度见上
4,线性hash函数的hash表,hash表的特点是预分配bucket count个单元,常常采用每个单元存储一个链表的冲突解决方法,他的查找性能取决于样本key数据在hash函数的图像上是否是均匀分布的,越均匀效果越高,查找复杂度和插入复杂度都决定于bucket长度、hash函数的选取、冲突的解决方法
结合case1和2分析:
case1:由于插入的是无序数据,且其中90%是重复的(意味着查找性能比插入性能重要),显然,适当选取bucket值和hash函数(即便是线性函数也有选择的余地)和解决冲突方法的hash表性能最好(趋于O(1)),avl-tree次之,排序数组和avl-tree性能相当(因这里插入操作比例低),非平衡二叉查找树也有类似的性能,非排序数组性能最差。
case2:输入数据是有序的,仍旧是参数合适的hash表性能最佳,趋于O(1)的时间复杂度,avl-tree次之。排序数组查找复杂度也是log2(N),由于是有序数据,在大小顺序与字典顺序一致时,插入复杂度很低,而相反时,插入复杂度很高,每次都要移动几乎整体的数据。有序数据还导致非平衡的二叉查找树的左右子树严重失衡,查找复杂度趋于O(N),性能相当低。非排序数组仍旧是低效的
E. 南京信息工程大学人工智能835真题分布
第一部分 目标与基本要求
数据结构与算法分析考试是为南京信息工程大学招收人工智能
方向硕士研究生而设置的具有选拔性质的全国统一入学考试科目,其目的是科学、公平、有效地测试学生掌握大学本科阶段数据结构与算法分析的基本知识、基本理论,以及运用数据结构与算法分析的理论和方法分析和解决问题的能力。评价的标准是高等学校本科毕业生能达到的及格或及格以上水平,以保证被录取者在开展人工智能方向的研究工作中,具有基本的计算机程序设计、数据结构与算法分析的理论素质,并具有理解和分析工程实际问题和具有工程实际应用的基本能力。
F. 数据结构与算法拿什么搜题
可以使用大学搜题app。
《数据结构与算法》注重理论与实践相结合,内容深入浅出,可以作为高等院校计算机学科相关专业的教材或参考书,同时对计算机科技工作者也有参考价值。
《数据结构与算法》以基本数据结构和算法设计策略为知识单元,系统地介绍了数据结构的知识与应用、计算机算法的设计与分析方法,主要内容包括线性表、树、图和广义表、算法设计策略以及查找与排序算法等。
G. 求《算法与数据结构考研试题精析第三版》全文免费下载百度网盘资源,谢谢~
《算法与数据结构考研试题精析第三版》网络网盘pdf最新全集下载:
链接: https://pan..com/s/1hdJxho2NwiuZLzCNLVmA5A
H. 求下面数据结构试题的答案...
一.
1,复杂性2.线性结构非线性结构
3.可以按序号随机存取4.数据元素
5.后进先出6.n7.只能在队头进行
9.长度1深度1
10-+A*BC/DE
11
12顶点Vp到顶点Vq之间的路径是指定的序列Vp,Vi1,Vi2•••Vim,Vq。
13n(n-2)/214n—1152n—1
17一种存储结构
19可以从表中任意结点开始遍历整个链表;只用一个指向尾结点的指针对链表头、尾进行操作,提高了效率。
20栈是仅限制在表的一端进行插入和删除的运算的线性表,是一种操作受限的线性表。
二.
1算法的时间复杂度和空间复杂度
2.队列
3.
4嵌套集合表示法,广义表表示法,凹入表示法
5.456.S(1)X(1)S(2)S(3)X(3)S(4)X(4)X(2)
7(1)O(nˆ2)
(2)O(nˆ2)
8.
哈夫曼树:
WPL=2*5+4*5+5*4+16*3+8*3+7*3+30=173
9.邻接矩阵:
邻接表:
10.二叉树:
前序:ABCEFD
中序:BEFCDA
后序:FEDCBA
I. 求数据结构试题…重点
这是我们老师要求的重点,即考点。打印出来,背一下就行了,准过!
第一章:绪论
1.1:数据结构课程的任务是:讨论数据的各种逻辑结构、在计算机中的存储结构以及各种操作的算法设计。
1.2:数据:是客观描述事物的数字、字符以及所有的能输入到计算机中并能被计算机接收的各种集合的统称。
数据元素:表示一个事物的一组数据称作是一个数据元素,是数据的基本单位。
数据项:是数据元素中有独立含义的、不可分割的最小标识单位。
数据结构概念包含三个方面:数据的逻辑结构、数据的存储结构的数据的操作。
1.3数据的逻辑结构指数据元素之间的逻辑关系,用一个数据元素的集合定义在此集合上的若干关系来表示,数据结构可以分为三种:线性结构、树结构和图。
1.4:数据元素及其关系在计算机中的存储表示称为数据的存储结构,也称为物理结构。
数据的存储结构基本形式有两种:顺序存储结构和链式存储结构。
2.1:算法:一个算法是一个有穷规则的集合,其规则确定一个解决某一特定类型问题的操作序列。算法规则需满足以下五个特性:
输入——算法有零个或多个输入数据。
输出——算法有一个或多个输出数据,与输入数据有某种特定关系。
有穷性——算法必须在执行又穷步之后结束。
确定性——算法的每个步骤必须含义明确,无二义性。
可行性——算法的每步操作必须是基本的,它们的原则上都能够精确地进行,用笔和纸做有穷次就可以完成。
有穷性和可行性是算法最重要的两个特征。
2.2:算法与数据结构:算法建立数据结构之上,对数据结构的操作需用算法来描述。
算法设计依赖数据的逻辑结构,算法实现依赖数据结构的存储结构。
2.3:算法的设计应满足五个目标:
正确性:算法应确切的满足应用问题的需求,这是算法设计的基本目标。
健壮性:即使输入数据不合适,算法也能做出适当的处理,不会导致不可控结
高时间效率:算法的执行时间越短,时间效率越高。 果。
高空间效率:算法执行时占用的存储空间越少,空间效率越高。
可读性:算法的可读性有利于人们对算法的理解。
2.4:度量算法的时间效率,时间复杂度,(课本39页)。
2.5:递归定义:即用一个概念本身直接或间接地定义它自己。递归定义有两个条件:
至少有一条初始定义是非递归的,如1!=1.
由已知函数值逐步递推计算出未知函数值,如用(n-1)!定义n!。
第二章:线性表
1.1线性表:线性表是由n(n>=0)个类型相同的数据元素a0,a1,a2,…an-1,组成的有限序列,记作: LinearList = (a0,a1,a2,…an-1)
其中,元素ai可以是整数、浮点数、字符、也可以是对象。n是线性表的元素个数,成为线性表长度。若n=0,则LinearList为空表。若n>0,则a0没有前驱元素,an-1没有后继元素,ai(0<i<n-1)有且仅有一个直接前驱元素ai-1和一个直接后继元素ai+1。
1.2线性表的顺序存储是用一组连续的内存单元依次存放线性表的数据元素,元素在内存的物理存储次序与它们在线性表中的逻辑次序相同。
线性表的数据元素数据同一种数据类型,设每个元素占用c字节,a0的存储地址为
Loc(a0),则ai的存储地址Loc(ai)为:Loc(ai) = Loc(a0)+ i*c
数组是顺序存储的随机存储结构,它占用一组连续的存储单元,通过下标识别元素,元素地址是下标的线性函数。
1.3:顺序表的插入和删除操作要移动数据元素。平均移动次数是 属数据表长度的一半。(课本第50页)
1.4:线性表的链式存储是用若干地址分散的存储单元存储数据元素,逻辑上相邻的数据元素在物理位置上不一定相邻,必须采用附加信息表示数据元素之间的顺序关系。
它有两个域组成:数据域和地址域。通常成为节点。(课本第55页及56页)
1.5单链表(课本56页)
单链表的遍历:Node<E> p = head; while(p!=null){ 访问p节点;p = p.next;}
单链表的插入和删除操作非常简便,只要改变节点间的链接关系,不需移动数据元素。
单链表的插入操作:1):空表插入/头插入 2)中间插入/尾插入
if(head == null) Node<E> q = new Node<E>(x);
{ head = new Node<E>(x); q.next = p.next;
}else{ p.next = q;
Node<E> q=new Node<E>(x); 中间插入或尾插入都不会改变单表
q.next = head; 的头指针head。
head = q;
}
单链表的删除操作:
头删除:head = head.next;
中间/尾删除:if(p.next!=null){ p.next = p.next.next;}
循环单链表:如果单链表最后一个节点的next链保存单链表的头指针head值,则该单链表成为环形结构,称为循环单链表。(课本67)
若rear是单链表的尾指针,则执行(rear.next=head;)语句,使单链表成为一条循环单链表。当head.next==head时,循环单链表为空。
1.6:双链表结构:双链表的每个结点有两个链域,分别指向它的前驱和后继结点,
当head.next==null时,双链表为空。
设p指向双链表中非两端的某个结点,则成立下列关系:p=p.next.prev=p.prev.next。
双链表的插入和删除:1)插入 2)删除
q=new DLinkNode(x); p.prev.next = p.next;
q.prev=p.prev;q.next =p; if(p.next=null){
p.prev.next = q;p.prev=q; (p.next).prev = p.prev;}
循环双链表:当head.next==head且head.prev==head时,循环双链表为空。
第三章:栈和队列
1.1栈:栈是一种特殊的线性表,其中插入和删除操作只允许在线性表的一端进行。允许操作的一端称为栈顶,不允许操作的一端称为栈底。栈有顺序栈和链式栈。
栈中插入元素的操作称为入栈,删除元素的操作称为出栈。没有元素的中称为空栈。
栈的进出栈顺序:后进先出,先进后出。(及75页的思考题)。
1.2:队列:队列是一种特殊的线性表,其中插入和删除操作分别在线性表的两端进行。
向队列中插入元素的过程称为入队,删除元素的过程称为出对,允许入队的一端称为队尾,允许出队的一端称为对头。没有元素的队列称为空队列。队列是先进先出。
第四章:串
1.1:串是一种特殊的线性表,其特殊性在于线性表中的每个元素是一个字符。一个串记为: s=“s0s1s2…sn-1” 其中n>=0,s是串名,一对双引号括起来的字符序列s0s1s2…sn-1是串值,si(i=0,1,2,…n-1)为特定字符集合中的一个字符。一个串中包含的字符个数称为串的长度。
长度为0的串称为空串,记作“”,而由一个或多个空格字符构成的字符串称为空格串。
子串:由串s中任意连续字符组成的一个子序列sub称为s的子串,s称为sub的主串。子串的序号是指该子串的第一个字符在主串中的序号。
串比较:两个串可比较是否相等,也可比较大小。两个串(子串)相等的充要条件是两个串(子串)的长度相同,并且各对应位置上的字符也相同。
两个串的大小由对应位置的第一个不同字符的大小决定,字符比较次序是从头开始依次向后。当两个串长度不等而对应位置的字符都相同时,较长的串定义为较“大”。
第五章:数组和广义表
1.1:数组是一种数据结构,数据元素具有相同的数据类型。一维数组的逻辑结构是线性表,多维数组是线性表的扩展。
1.2:一维数组:一维数组采用顺序存储结构。一个一维数组占用一组连续的存储单元。
设数组第一个元素a0的存储地址为Loc(a0),每个元素占用c字节,则数组其他元素ai的存储地址Loc(ai)为: Loc(ai)= Loc(a0)+i*c
数组通过下标识别元素,元素地址是下标的线性函数。一个下标能够唯一确定一个元素,所划给的时间是O(1)。因此数组是随机存取结构,这是数组最大的优点。
1.3:多维数组的遍历:有两种次序:行主序和列主序。
行主序:以行为主序,按行递增访问数组元素,访问完第i行的所有元素之后再访问第i+1行的元素,同一行上按列递增访问数组元素。
a00,a01,…a0(n-1), a10,a11,…a1(n-1),…a(m-1)0,a(m-1)1,…,a(m-1)(n-1)
2)列主序:以列为主序,按列递增访问数组元素,访问完第j列的所有元素之后再访问第j+1列的元素,同一列上按列递增访问数组元素。
多维数组的存储结构:多维数组也是由多个一维数组组合而成,组合方式有一下两种。
静态多维数组的顺序存储结构:可按行主序和列主序进行顺序存储。
按行主序存储时,元素aij的地址为:Loc(aij)= Loc(a00)+(i*n+j)*c
按列主序存储时,Loc(aij)= Loc(a00)+(j*m+i)*c
动态多维数组的存储结构。
二维数组元素地址就是两个下标的线性函数。无论采用哪种存储结构,多维数组都是基于一维数组的,因此也只能进行赋值、取值两种存取操作,不能进行插入,删除操作。
第六章:
树是数据元素(结点)之间具有层次关系的非线性结构。在树结构中,除根以外的结点只有一个直接前驱结点,可以有零至多个直接后继结点。根没有前驱结点。
树是由n(n>=0)个结点组成的有限集合(树中元素通常称为结点)。N=0的树称为空树;n>0大的树T;
@有一个特殊的结点称为根结点,它只有后继结点,没有前驱结点。
@除根结点之外的其他结点分为m(m>=0)个互不相交的集合T0,T1,T3……..,Tm-1,其中每个集合Ti(0<=i<m)本身又是一棵树,称为根的子树。
树是递归定义的。结点是树大的基本单位,若干个结点组成一棵子树,若干棵互不相交的子树组成一棵树。树的每个结点都是该树中某一棵子树的根。因此,树是由结点组成的、结点之间具有层次关系大的非线性结构。
结点的前驱结点称为其父母结点,反之,结点大的后继结点称为其孩子结点。一棵树中,只有根结点没有父母结点,其他结点有且仅有一个父母结点。
拥有同一个父母结点的多个结点之间称为兄弟结点。结点的祖先是指从根结点到其父母结点所经过大的所有结点。结点的后代是指该结点的所有孩子结点,以及孩子的孩子等。
结点的度是结点所拥有子树的棵数。度为0的结点称为叶子结点,又叫终端结点;树中除叶子结点之外的其他结点称为分支结点,又叫非叶子结点或非终端结点。树的度是指树中各结点度的最大值。
结点的层次属性反应结点处于树中的层次位置。约定根结点的层次为1,其他结点的层次是其父母结点的层次加1。显然,兄弟结点的层次相同。
树的高度或深度是树中结点的最大层次树。
设树中x结点是y结点的父母结点,有序对(x,y)称为连接这两个结点的分支,也称为边。
设(X0,X1,….,Xk-1)是由树中结点组成的一个序列,且(Xi,Xi+1)(0<=i<k-1)都是树中的边,则该序列称为从X0到Xk-1的一条路径。路径长度为路径上的边数。
在树的定义中,结点的子树T0,T1…..,Tm-1之间没有次序,可以交换位置,称为无序树,简称树。如果结点的子树T0,T1……,Tm-1从左到右是有次序的,不能交换位置,则 称该树为有序树。
森林是m(m>=0)棵互不相干的树的集合。给森林加上一个根结点就变成一棵树,将树的根节点删除就变成森林。
二叉树的性质1:若根结点的层次为1,则二叉树第i层最多有2 的i-1次方(i>=1)个结点。
二叉树的性质2:在高度为k的二叉树中,最多有2的k次方减一个结点。
二叉树的性质3:设一棵二叉树的叶子结点数为n0,2度结点数为n2,则n0=n2+1。
一棵高度为k的满二叉树是具有2的k次方减一个结点的二叉树。满二叉树中每一层的结点数目都达到最大值。对满二叉树的结点进行连续编号,约定根节点的序号为0,从根节点开始,自上而下,每层自左至右编号。
一棵具有n个结点高度为k的二叉树,如果他的每个节点都与高度为k的满二叉树中序号为0~n-1
的结点一一对应,则这棵二叉树为为完全二叉树。
满二叉树是完全二叉树,而完全二叉树不一定是满二叉树。完全二叉树的第1~k-1层是满二叉树第k层不满,并且该层所有结点必须集中在该层左边的若干位置上。
二叉树的性质4:一棵具有n个结点的完全二叉树,其高度k=log2n的绝对值+1
二叉树的性质5:一棵具有n个结点的完全二叉树,对序号为i的结点,有
@若i=0,则i为根节点,无父母结点;若i>0,则i的父母结点的序号为[(i-1)/2]。
@若2i+1<n,则i的左孩子结点序号为2i+1;否则i无左孩子。
@若2i+2<n,则i的右孩子结点的序号为2i+2,否则i无右孩子。
二叉树的遍历
二叉树的遍历是按照一定规则和次序访问二叉树中的所有结点,并且每个结点仅被访问一次。
二叉树的三种次序遍历
1:先根次序;访问根节点,遍历左子树,遍历右子树。
2:中根次序;遍历左子树,访问右子树,遍历右子树。
3:后根次序;遍历左子树,遍历右子树,访问根节点。
先根次序遍历时,最先访问根节点;后根次序遍历时,最后访问根节点;中根次序遍历时,左子树上的结点在根节点之前访问,右子树上的结点在根节点之后访问。
二叉树的插入和删除操作P147
二叉树的层次遍历P149
习题P167 6—10,6—19
第七章
图是由定点集合及顶点间的关系集合组成的一种数据关边系。顶点之间的关系成为边。一个图G记为G=(V,E),V是顶点A的有限集合,E是边的有限集合。即 V={A|A属于某个数据元素集合}
E={(A,B)|A,B属于V}或E={<A,B>|A,B属于V且Path(A,B)}其中Path(A,B)表示从顶点A到B的一条单向通路,即Path(A,B)是有方向的。
无向图中的边事没有方向,每条边用两个顶点的无序对表示。
有向图中的边是有方向,每条边用两个顶点的有序对表示。
完全图指图的边数达到最大值。n个顶点的完全图记为Kn。无向完全图Kn的边数为n*(n-1)/2,有向完全图Kn的边数为n*(n-1)。
子图:设图G==(V,E),G’=(V’,E’),若V’包含于V且E’包含于E,则称图G’是G的子图。若G’是G的真子图。
连通图:在无向图G中,若从顶点VI到Vj有路径,则称Vi和Vj是联通的。若图G中任意一对顶点Vi和Vj(Vi不等于Vj)都是联通的,则称G为连通图。非连通图的极大联通子图称为该图的联通分量。
强连通图:在有向图中,若在每一对顶点Vi和Vj(Vi不等于Vj)之间都存在一条从Vi到Vj的路径,也存在一条从Vi到Vj的路径,也存在一条从Vi到Vj的路径,则称该图的强连通图。非强连通图的极大强连通子图称为该图的强连通图分量。
图的遍历
遍历图是指从图G中任意一个顶点V出发,沿着图中的边前行,到达并访问图中的所有顶点,且每个顶点仅被访问一次。遍历图要考虑一下三个问题:
@指定遍历的第一个访问顶点
@由于一个顶点可能与多个顶点相邻,因此要在多个邻接顶点之间约定一种访问次序。
@由于图中可能存在回路,在访问某个顶点之后,可能沿着某条路径又回到该顶点。
深度优先搜索
图的深度优先搜索策略是,访问某个顶点v,接着寻找v的另一个未被访问的邻接顶点w访问,如此反复执行,走过一条较长路径到达最远顶点;若顶点v没有未被访问的其他邻接顶点,则回到前一个被访问顶点,再寻找其他访问路径。
图的深度优先搜索遍历算法P188
联通的无回路的无向图,简称树。树中的悬挂点又成为树叶,其他顶点称为分支点。各连通分量均为树的图称为森林,树是森林。
由于树中无回路,因此树中必定无自身环也无重边(否则他有回路)若去掉树中的任意一条边,则变成森林,成为非联通图;若给树加上一条边,形成图中的一条回路,则不是树。P191
生成树和生成森林:
一个连通无向图的生成树是该图的一个极小联通生成子图,它包含原图中所有顶点(n个)以及足以构成一棵树的n-1条边。
一个非联通的无向图,其各连通图分量的生成图组成该图的生成森林。
图的生成图或生成森林不是唯一的,从不同顶点开始、采用不同遍历可以得到不同的生成树或森林。
在生成树中,任何树中,任何两个顶点之间只有唯一的一条路径。
第八章
折半查找算法描述 P206,P207
二叉排序树及其查找:
二叉排序树或者是一棵空树;或者是具有下列性质的二叉树:
@每个结点都有一个作为查找依据的关键字,所有结点的关键字互不相同。
@若一个结点的左子树不空,则左子树上所有结点的关键字均小于这个节点的关键字;
@每个结点的左右子树也分别为二叉排序树。
在一棵二叉排序树中,查找值为value的结点,算法描述如下:
@从根结点开始,设p指向根结点
@将value与p结点的关键字进行比较,若两者相等,则查找成功;若value值较小,则在p的左子树中继续查找;若value值较大,则在p的右子树中继续查找。
@重复执行上一步,直到查找成功或p为空,若p为空,则查找不成功。
习题 8-6
第九章
直接插入排序算法描述:p228
冒泡排序算法的描述:p232
快速排序算法描述p233
直接选择排序算法描述p236
直接选择排序算法实现如下:
Public static void selectSort(int[]table){
for(int i=0;i<table.length-1;i++){
int min=I;
for(int j=i+1;j<table.length;j++){
if(table[j]<table[min])
min=j;
if(min!=i){
int temp=table[i];
table[i]==table[min];
table[min]=temp;
}
}
}
}
堆排序是完全二叉树的应用,是充分利用完全二叉树特性的一种选择排序。
堆定义:设n个元素的数据序列{k0,k1,。。。。kn-1},当且仅当满足下列关系
k1<=k2i+1且ki<=k2i+2 i=0,1,2,3,….,[n/2-1]
或ki>==k2i+1且ki>=2i+2i=0,1,2,3,…..[n/2-1]时,序列{k0,k1…….kn-1}称为最小堆或最大堆。将最小(大)堆看成是一颗完全二叉树的层次遍历序列,则任意一个结点的关键字都小于等于(大于等于)它的孩子节点的关键字值,由此可知,根结点值最小(大)。根据二叉树的性质5,完全二叉树中的第i(0<=i<n)个结点,如果有孩子,则左孩子为第2i+1个结点,右孩子为第2i+2个结点。
希望对你会有所帮助。