西电数据结构大作业
西南大学网教 (0012)《数据结构》大作业A 答案
则关键字为49的地址为。
9)数据结构被形式地定义为(D, R),其中D是的有限集合,R是D上的有限集合。
10)一个算法的效率分为效率和效率。
3、应用题1)编写算法,将一个头指针为head不带头结点的单链表改造为一个单向循环链表,并分析算法的时间复杂度。
2)已知二叉树的先序遍历序列为ABCDEFGH,中序遍历序列为CBEDFAGH,画出二叉树。
然后写出该二叉树的后序遍历序列。
3)试用权集合{12,4,5,6,1,2}构造哈夫曼树,并计算哈夫曼树的带权路径长度。
4)已知图G如下所示,根据Prim算法,构造最小生成树。
(要求给出生成过程)5)设哈希表HT表长m为13,哈希函数为H(k)=k MOD m,给定的关键值序列为{19,14,23,10,68,20,84,27,55,11}。
试求出用线性探测法解决冲突时所构造的哈希表,并求出在等概率的情况下查找成功的平均查找长度ASL。
二、大作业要求大作业共需要完成22道题:第1大题必做,满分30分;第2大题必做,满分30分;第3大题选作2题,满分40分。
答卷提交要求:考试题提前公布,学生下载试题和答题卷后,在答题卷上答题。
完成后需网上提交答卷。
答卷于11月20日--12月6日通过点击页面左侧导航栏内“我的考试”-“课程论文/大作业”提交。
1、选择题1) C 2) C 3) D 4) A 5) C6) C 7) B 8) D 9) A 10) A2、填空题1) l==l->next2)栈顶3)三元组顺序表十字链表。
4)LOC (A[0][0])+(n*i+j)*k5)R[2i+1]6) 先序遍历7)n-18)99) 数据元素关系10)时间效率空间效率3、应用题2)已知二叉树的先序遍历序列为ABCDEFGH,中序遍历序列为CBEDFAGH,画出二叉树。
然后写出该二叉树的后序遍历序列。
答:后序遍历序列CEFDBHGA3)试用权集合{12,4,5,6,1,2}构造哈夫曼树,并计算哈夫曼树的带权路径长度。
数据结构大作业
班级021051学号021050**数据结构大作业题目 Huffman的编码与译码学院电子工程学院专业智能科学与技术学生姓名****导师姓名朱虎明Huffman 编码与译码1.实验目的:在掌握相关基础知识的基础上,学会自己设计实验算法,熟练掌握Huffman 树的建立方法,Huffman 编码的方法,进而设计出Huffman 译码算法,并编程实现。
2.实验要求:制作出能够实现基于26个英文字母的任意字符串的编译码。
写出技术工作报告并附源程序。
3.实验内容及任务:3.1.设字符集为26个英文字母,其出现频度如下表所示。
3.2.建Huffman 树;3.3.利用所建Huffman 树对任一字符串文件进行编码——即设计一个Huffman 编码器;3.4.对任一字符串文件的编码进行译码——即设计一个Huffman 译码器。
实现步骤:(1)数据存储结构设计; (2)操作模块设计; (3)建树算法设计;51 48 1 15 63 57 20 32 5 1 频度z y x w v u t 字符11611882380频度p 21 f q15 g r 47 h s o n m l k j 字符 57 103 32 22 13 64 186 频度 i e d c b a 空格 字符(4)编码器设计;(5)译码器设计4.分析以及算法描述4.1.分析问题1)首先学习二叉树的知识,了解二叉树的路径、权数以及带权路径长度计算。
2)认识霍夫曼树,了解霍夫曼树的定义,构造霍夫曼树构造算法①又给定的n个权值{w1,w2,w3,……,w n}构造根节点的二叉树,从而得到一个二叉树森林F={T1,T2,T3,……T n}。
②在二叉树森里选取根节点全职最小和此最小的两棵二叉树作为左右节点构造新的二叉树,此时新的二叉树的根节点权值为左右子树权值之和。
③在二叉树森林中删除作为新二叉树的根节点左右子树的两棵二叉树,将新的二叉树加入到二叉树森林F中。
西安电子科技大学计算机辅修专业数据结构试题
西安电子科技大学计算机辅修专业数据结构试题考试时间 120 分钟试题1.考试形式:闭卷;2。
考试日期:2013年12月10 日3.本试卷共四大题,满分100分。
学院+班级学号姓名任课教师一. 选择题(15小题,每题2分,共30分)1. 逻辑上通常可以将数据结构分为(C)A.动态结构和静态结构B.顺序结构和链式结构C.线性结构和非线性结构D.初等结构和组合结构2. 在下列对顺序表进行的操作中,算法时间复杂度为O(1)的是(A)A.访问第i个元素的前驱(1<ni≤)B.在第i个元素之后插入一个新元素(ni≤)1≤C.删除第i个元素(n≤)1≤iD.对顺序表中元素进行排序3. 一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1≦i≦n)个元素是( B )。
A. 不确定B. n-i+1C. iD. n-i4. 如果将矩阵A n×n的每一列看成一个子表,整个矩阵看成是一个广义表L,即L=((a11,a21,…,a n1),( a12,a22,…,a n2),…,(a1n,a2n,…,a nn)),并且可以通过求表头head和求表尾tail的运算求取矩阵中的每一个元素,则求得a21的运算是(A )A. head (tail (head (L)))B. head (head(head(L)))C. tail (head (tail (L)))D. head (head (tail (L)))5.设森林F中有三棵树,第一、第二、第三棵树的结点个数分别为M1,M2和M3,则与森林F对应的二叉树根结点的右子树上的结点个数是( D )。
A.M1 B.M1+M2 C.M3 D.M2+M36. 栈和队列的共同点是( C )。
A. 都是先进先出B. 都是先进后出C. 只允许在端点处插入和删除元素D. 没有共同点7. 若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定a ij(i<j)的位置k的关系为( B )。
西安电子科技大学期末数据结构试题及详细答案
1.数据结构试卷(一)、单选题(每题 2分,共20分)1. 栈和队列的共同特点是()。
A. 只允许在端点处插入和删除元素B. 都是先进后岀C. 都是先进先岀D.没有共同点2. 用链接方式存储的队列,在进行插入运算时 (). A. 仅修改头指针 B. 头、尾指针都要修改 C. 仅修改尾指针 D. 头、尾指针可能都要修改3. 以下数据结构中哪一个是非线性结构?()A.队列B.栈C.线性表D.二叉树4. 设有一个二维数组 A[m][n],假设A[0][0]存放位置在644(io ), A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](io )存放在什么位置?脚注(io )表示用10进制表示。
7. 若有18个元素的有序表存放在一维数组 找A : 3 ]的比较序列的下标依次为( A.1,2,3 B. 9,5,2,3C. 9,5,3D. 9,4,2,38.对n 个记录的文件进行快速排序,所需要的辅助存储空间大致为A. O (1)B. O (n )C. O (1og 2n )D. O (n2)9. 对于线性表(7,34, 55, 25, 64, 46,20,10)进行散列存储时,若选用 H (K ) =K %9作为散列 函数,则散列地址为1的元素有( )个,A . 1B . 2C . 3D . 410. 设有6个结点的无向图,该图至少应有 ()条边才能确保是一个连通图。
A.5B.6C.7D.8二、填空题(每空1分,共26分) 1. 通常从四个方面评价算法的质量: ___________ 、 __________ 、 __________ 和 ________ 。
2. 一个算法的时间复杂度为(n 3+n 2log 2n+14n )/n 2,其数量级表示为 __________ 。
3. 假定一棵树的广义表表示为 A ( C , D (E , F , G ), H (I , J )),则树中所含的结点数为 __________ 个,树的深度为 ____________ ,树的度为 _________ 。
数据结构课程设计大作业
课程设计(数据结构)一、题目的目的和要求1.设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。
(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
2.设计题目要求设计内容:本系统应完成以下几方面的功能:学生信息的建立:create();学生信息的插入:insert();学生信息的查询:search();学生信息的修改:change();学生信息的删除:delete();学生信息的输出:print()。
设计要求:(1)每条记录至少包含:姓名(name )、(xuehao),(kemu),(chengji)属性。
(2)作为一个完整的系统,应具有友好的界面和较强的容错能力(3)程序能正常运行,并写出课程设计报告二、设计进度及完成情况三、主要参考文献及资料[1] 叶核亚编著. 数据结构(Java版)(第3版). 北京:电子工业出版社,2011[2] 施平安等译. JAVA程序设计教程(第5版). 北京:清华大学出版社,2007[3] Java相关资料四、成绩评定设计成绩:(教师填写)指导老师:(签字)目录第一章系统概述 (1)第二章系统分析 (1)第三章系统设计 (1)第四章系统实现 (10)第五章系统运行与测试 (11)第六章总结与心得 .............................................. 错误!未定义书签。
参考文献 ................................................................ 错误!未定义书签。
第一章系统概述在这次的课程设计中我们选择的题目是:学生信息系统,能够添加、删除、查询联系人等。
由于自己的知识有限,程序可能不是太完美,但是我会认真对待,尽自己最大女里去完成此次任务!!!第二章系统分析学生信息系统主要用于帮助用户保存学生信息,方便用户查询联系人的相关信息。
西安电子科技大学机电工程学院 软件技术大作业
西安电子科技大学机电工程学院软件技术大作业任课老师李凯上机报告一、上机目的1.熟悉线性表,链表,队列,二叉树等数据结构2.学习利用C语言实现多种数据结构的建立和多种操作(插入,删除等)3.在编程过程中学习程序的调试方式二、上机内容假设称正读反读都相同的字符序列为回文。
例如,‘abba’,‘abcba’都是回文,‘ababab’不是回文,试编写程序判别从标准输入读入的以’@’为结束符的字符序列是否是回文。
三·设计说明5题1)用一维数组实现。
(当然可以参考用课件中的队列的方法,但就算法繁简来说,用数组实现更为简单高效)2)基本思想:设数组长度为n。
分别将a[0]与a[n-1],a[1]与a[n-2],a[2]与a[n-3]……比较,判断是否相等,相等则计数变量k加1,否则退出循环。
最后判断k值。
若是回文,则k应该等于[n/2],否则就不是回文。
3)输入说明:以$输入为结束标志三、调试分析1.调试所遇到问题1)编译时,头文件包含不全2)逻辑一般没有错误,而问题多出在实际实现过程与自己想法间的差距。
例如:2题,判断条件(s!=r)&&(r->next!=s)。
我想实现的是当结点数为偶数时,头尾两部分交换结束的条件是s=r;当为奇数时,结束的条件是s跑到r的后面。
因此在写程序初,逻辑运算用的是||(或),即二种情况中的一种,结果运行时怎么都不正确。
后来在老师帮助下才找到错误。
3)对于算法实际运行的方式理解不到位。
在做第6题时认为该题应该比较简单,因为二叉树的建立和遍历课本上都有现成的算法,自己只需添加相应的判断条件即可。
结果调试发现怎么做都不正确,后来仔细想递归算法的细节才注意到统计变量递归一次又从头开始统计,所以结果始终是结点数1,叶子数0。
改进作法是将统计量变为一个初值为0的参数,发现也是不行的。
最后只能改为全局变量。
4)输入方式不正确。
在输入时没有注意输入方式,随便加空格,使得运行结果错误。
西电最优化上机报告(大作业)
上机报告一.最速下降法算法简述:1.在本例中,先将最速下降方向变量赋一个值,使其二范数满足大于ε的迭代条件,进入循环。
2.将函数的一阶导数化简,存在一个矩阵,将其hesse矩阵存在另一个矩阵。
依照公式求出α,进而求出下一任迭代的矩阵初值。
循环内设置一个计数功能的变量,统计迭代次数。
3.求其方向导数的二范数,进行判别,若小于ε,则跳出循环,否则将继续迭代。
4.显示最优解,终止条件,最小函数值。
心得体会:最速下降法的精髓,无疑是求梯度,然后利用梯度和hesse矩阵综合计算,求解下一个当前最优解。
但是,要求函数是严格的凸函数,结合严格凸函数的大致图像,这就给初值的选取提供了一点参考。
例如在本例中,由于含有两个变量的二次方之和,结合大致图像,想当然的,初值的选取应当在原点附近;又因为变量的二次方之和后面,还减去了变量的一次形式和一次混合积,所以初值的选取应该再向第一象限倾斜。
综合以上考量,第一次选取(1,1)作为初值,判别精度方面,取到千分位,暂定为0.001。
运行以后,结果显示迭代了25次,最优解为(3.9995,1.9996),终止条件为5.4592e-04,目标函数为-8.0000。
这个结果已经相当接近笔算结果。
整体的运行也比较流畅,运算速度也比较快。
第二次取值,决定保留判别精度不变,将初值再适当向第一象限倾斜,取(2,2)作为初值,运行后,显示只迭代了11次!最优结果显示(3.9996,1.9997),终止条件为3.6204e-04,最优解-8.0000。
可见,最优结果更接近理想值,终止条件也变小了,最关键的是,迭代次数减少至第一次的一半以下!这说明以上初选取的方向是对的!第三次再进行初值细化,判别精度仍然不变,初值取(3,3)。
结果令人兴奋,只迭代了四次!最优解已经显示为(4.0000,2.0000),终止条件为2.4952e-04,目标函数-8.0000。
第四次,判别精度不变,取初值(4,4)。
杭州电子科技大学大二计算机专业数据结构试卷及答案
杭州电子科技大学学生考试卷〔A〕卷一.是非题1. 数据结构可用三元式表示〔D,S,P〕。
其中:D是数据对象,S是D上的关系,P是对D的根本操作集。
(f)2 简单地说,数据结构是带有结构的数据元素的集合。
(t)3 判断带头结点的非空循环单链表〔头指针为L〕中指针p所指结点是最后一个元素结点的条件是:p->next==L。
(t)4 线性表的链式存储结构具有可直接存取表中任一元素的优点。
(f)5 线性表的顺序存储结构优于链式存储结构。
(f)6. 在单链表P指针所指结点之后插入S结点的操作是:P->next= S ; S-> next = P->next;。
(f)7 对于插入、删除而言,线性表的链式存储优于顺序存储。
(t)8. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
(f)9. 栈和队列是操作上受限制的线性表。
(t)10. 队列是与线性表完全不同的一种数据结构。
(f)11. 队列是一种操作受限的线性表,凡对数据元素的操作仅限一端进行。
(f)12. 栈和队列也是线性表。
如果需要,可对它们中的任一元素进行操作。
(f)13. 栈是限定仅在表头进行插入和表尾进行删除运算的线性表。
(f)14. 二叉树中每个结点有两个子结点,而对一般的树,则无此限制,所以,二叉树是树的特殊情形。
(f)15 二叉树是一棵结点的度最大为二的树。
(f)16 赫夫曼树中结点个数一定是奇数。
(t)17 在二叉树的中序遍历序列中,任意一个结点均处在其左孩子结点的后面。
(t)18 假设B是一棵树,B′是对应的二叉树。
则B的后根遍历相当于B′的后序遍历。
(f)19. 通常,二叉树的第i层上有2i-1个结点。
(f)20. 中序线索二叉树的优点是便于在中序下查找直接前驱结点和直接后继结点。
(t)21 二叉树的先序遍历序列中,任意一个结点均处在其孩子结点的前面。
(t)22 由树结点的先根序列和后根序列可以唯一地确定一棵树。
西电算法设计大作业
算法设计大作业寻找多数元素班级:021151学号:02115037姓名:隋伟哲(1)问题提出:令A[1,2,…n]是一个整数序列,A中的整数a如果在A中出现的次数多余⎣n/2⎦,那么a称为多数元素。
例如在序列1,3,2,3,3,4,3中,3是多数元素,因为在7个元素中它出现了四次。
有几个方法可以解决这个问题。
蛮力方法是把每个元素和其他各个元素比较,并且对每个元素计数,如果某个元素的计数大于⎣n/2⎦,就可以断定它是多数元素,否则在序列中就没有多数元素。
但这样比较的次数是n(n-1)/2=Θ(错误!未找到引用源。
),这种方法的代价太昂贵了。
比较有效的算法是对这些元素进行排序,并且计算每个元素在序列中出现了多少次。
这在最坏情况下的代价是Θ(n 错误!未找到引用源。
).因为在最坏情况下,排序这一步需要Ω(n 错误!未找到引用源。
)。
另外一种方法是寻找中间元素,就是第⎡n/2⎤元素,因为多数元素在排序的序列中一定是中间元素。
可以扫描这个序列来测试中间元素是否是多数元素。
由于中间元素可以在Θ(n)时间内找到,这个方法要花费Θ(n)时间。
有一个漂亮的求解方法,它比较的次数要少得多,我们用归纳法导出这个算法,这个算法的实质是基于下面的观察结论。
观察结论:在原序列中去除两个不同的元素后,原序列的多数元素在新序列中还是多数元素。
这个结论支持下述寻找多数元素候选者的过程。
将计数器置1,并令c=A[1]。
从A[2]开始逐个扫描元素,如果被扫描的元素和c相等。
则计数器加1,否则计数器减1.如果所有的元素都扫描完并且计数器的值大于0,那么返回c作为多数元素的候选者。
如果在c和A[j](1<j<n)比较式计数器为0,那么对A[j+1,…n]上的过程调用candidate过程。
算法的伪代码描述如下。
(2)算法Input: An array A[1…n] of n elements;Output: The majority element if it exists; otherwise none;1. c←candidate(1);2. count←0;3. for j←1 to n4. if A[j]=c then count←count+1;5. end for;6. if count>⎣n/2⎦ then return c;7. else return none;candidate(m)1. j←m; c←A[m]; count←1;2. while j<n and count>03. j←j+1;4. if A[j]=c then count←count+1;5. else count←count-1;6. end while;7. if j=n then return c;8. else return candidate(j+1);(3)代码//Majority.cpp#include<iostream>using namespace std;int Candidate(int *A, int n, int m);int Majority(int *A, int n);int main(){int n;cout << "please input the number of the array: ";cin >> n;int *A;A = (int *) malloc(n*sizeof(int) );cout << "please input the array: ";for (int i = 0; i < n; i++)cin >> A[i];if (Majority(A, n) != 'N')cout << "the majority is: " << Majority(A, n);elsecout << "the majority element do not exist! ";free(A);cin.get();cin.get();return 0;}int Majority(int *A, int n){int c = Candidate(A, n, 0), count = 0;for (int j = 0; j < n; j++)if (A[j] == c)count += 1;if (count > n / 2)return c;else return'N';}int Candidate(int *A, int n, int m){int j = m, c = A[m], count = 1;while (j < n && count>0){j += 1;if (A[j] == c)count += 1;else count -= 1;}if (j == n)return c;else return Candidate(A, n, j + 1); }(4)运行结果(5)设计实例首先输入数据的个数n=7,然后依次读入n个数(1,3,2,3,3,4,3)。
西电_C++大作业报告
大作业报告一、题目:销售公司员工管理设计一个虚基类Staff(员工),包含编号、姓名和年龄保护数据成员以及相关的成员函数;由Staff派生出销售员类Salesman,包含销售额保护数据成员以及相关的成员函数;再由Staff派生出经理类Manager;然后由Salesman和Manager 类派生出销售经理类SalesManager。
设计一个利用文件处理方式实现对公司人员(包括销售员、经理和销售经理)进行管理,具有增加数据、更新数据、查询数据、删除数据以及重组文件的功能。
(删除数据在记录中做删除标志,重组文件指在物理上删除有删除标志的记录。
)另外要求分别统计这三类员工的人数以及所有员工的总数。
二、分析:1、类的分析:从题目中可以看出,至少需要有类Staff,类Salesman,类Manager,类SalesManager这四个类。
这四个类是最基本的。
当然,还需要添加其他类,在后面的分析中。
2、类中数据成员的分析:这四个类的关系以及相关的数据成员,题目中说得很清楚。
为了对象信息的完整性,在类Salesman中添加一个数据成员title,用来标记一个员工的职称;在类Manager中添加一个数据成员position,用来标记一个员工的职位。
当然,程序中也可以不添加。
其中,关键在于各个类中成员函数的设计。
3、类中成员函数的分析:考虑到要对数据的处理,各个类中要有成员函数能够实现输入数据的功能来实例化对象,还要有成员函数来输出一个对象的相关信息,即输出一个对象中的数据成员信息。
由于题目要求利用文件处理方式实现对公司人员进行管理,所以,各个类中要有成员函数能够将一个对象的相关信息写入到文件中,还要有一个成员函数能够将相关信息从文件中读出。
因此,每个类中至少要有上述四种成员函数。
由于类中存在继承关系,为了优化程序,利用虚函数实现多态性,在基类Staff中将这四种函数定义为虚函数,并在其他三个类中重写这四个函数,就可以通过基类指针来访问派生类中这四个同名函数。
西安电子科技大学951数据结构大纲
951“数据结构”复习参考提纲一、考察目标通信、计算机学科专业基础综合考试涵盖数据结构学科专业基础课程。
要求考生比较系统地掌握数据结构专业基础课程的基本概念、基本原理和基本方法,能够综合运用所学的基本原理和基本方法分析、判断和解决有关理论问题和实际问题。
二、考试形式和试卷结构1、试卷满分及考试时间:本试卷满分为150,考试时间为180分钟2、答题方式:闭卷,笔试3、试卷内容结构:数据结构150分三、总体要求“数据结构”要求学生掌握数据结构的基本理论和基本方法,熟悉解决程序设计问题所需的基本数据结构和基础算法,掌握各种程序设计中常用的数据结构的基本概念、对应的逻辑结构和存储结构及其基本运算,各种数据结构的基本特点和典型应用场景。
熟练使用基础数据结构进行算法程序设计。
四、各章复习要点(一)数据结构基本概念1.复习内容数据结构的概念,数据结构的逻辑结构和物理结构,程序设计的关键技术。
2.具体要求数据结构的概念、名词和术语数据结构的逻辑结构数据结构的物理结构(二)线性表1.复习内容线性表的基本概念和运算,顺序表的基本运算,单链表、循环链表、双向链表的基本运算,顺序表和链表的应用实例分析。
2.具体要求线性表的概念和基本运算线性表的顺序存储表示及算法线性表的链式存储表示及算法顺序表及链表的应用(三)栈和队列1.复习内容栈和队列的基本概念、基本操作、存储结构和应用。
2.具体要求栈和队列的基本概念和基本操作栈和队列的顺序存储结构栈和队列的链式存储结构栈和队列的应用(四)串和数组1.复习内容串的基本概念、运算和存储结构,模式匹配算法,数组的概念、存储结构,矩阵压缩存储。
2.具体要求串的基本概念和基本操作串的存储结构模式匹配算法数组的概念数组的存储结构矩阵压缩存储(五)树1.复习内容数、二叉树、森林、线索二叉树的基本概念,二叉树的遍历方法,树和森林之间的转换方法,二叉树的应用。
2.具体要求树结构的基本概念、术语二叉树的性质和存储表示。
(精华版)国家开放大学电大《数据结构》网络课形考网考作业及答案
(精华版)国家开放大学电大《数据结构》网络课形考网考作业及答案(精华版)国家开放大学电大《数据结构》网络课形考网考作业及答案100%通过考试说明:2022年秋期电大把该网络课纳入到“国开平台”进行考核,该课程共有4个形考任务,针对该门课程,本人汇总了该科所有的题,形成一个完整的标准题库,并且以后会不断更新,对考生的复习、作业和考试起着非常重要的作用,会给您节省大量的时间。
做考题时,利用本文档中的查找工具,把考题中的关键字输到查找工具的查找内容框内,就可迅速查找到该题答案。
本文库还有其他网核及教学考一体化答案,敬请查看。
课程总成绩=形成性考核×50%+终结性考试×50%形考任务1一、单项选择题(每小题3分,共60分)题目1把数据存储到计算机中,并具体体现数据元素间的逻辑结构称为()。
选择一项: D.物理结构题目2下列说法中,不正确的是()。
选择一项: C.数据项可由若干个数据元素构成题目3一个存储结点存储一个()。
选择一项: C.数据元素题目4数据结构中,与所使用的计算机无关的是数据的()。
选择一项: C.逻辑结构题目5在线性表的顺序结构中,以下说法正确的是()。
选择一项: D.逻辑上相邻的元素在物理位置上也相邻题目6对链表,以下叙述中正确的是()。
选择一项: C.不能随机访问任一结点题目7下列的叙述中,不属于算法特性的是()。
选择一项: C.可读性题目8算法的时间复杂度与()有关。
选择一项: D.算法本身题目9设有一个长度为n的顺序表,要在第i个元素之前(也就是插入元素作为新表的第i个元素),插入一个元素,则移动元素个数为()。
选择一项: C.n-i+1题目10设有一个长度为n的顺序表,要删除第i个元素移动元素的个数为()。
选择一项: C.n-i题目11在一个单链表中,p、q分别指向表中两个相邻的结点,且q所指结点是p所指结点的直接后继,现要删除q所指结点,可用语句()。
选择一项: A.p->next=q->next题目12在一个单链表中p所指结点之后插入一个s所指的结点时,可执行()。
2022年西安电子科技大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)
2022年西安电子科技大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、无向图G=(V,E),其中:V={a,b,c,d,e,f},E={(a,b),(a, e),(a,c),(b,e),(c,f),(f,d),(e,d)},对该图进行深度优先遍历,得到的顶点序列正确的是()。
A.a,b,e,c,d,fB.a,c,f,e,b,dC.a,e,b,c,f, dD.a,e,d,f,c,b2、将两个各有N个元素的有序表归并成一个有序表,其最少的比较次数是()。
A.NB.2N-1C.2ND.N-13、以下数据结构中,()是非线性数据结构。
A.树B.字符串C.队D.栈4、用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时()。
A.仅修改队头指针B.仅修改队尾指针C.队头、队尾指针都可能要修改D.队头、队尾指针都要修改5、动态存储管理系统中,通常可有()种不同的分配策略。
A.1B.2C.3D.46、已知字符串S为“abaabaabacacaabaabcc”,模式串t为“abaabc”,采用KMP算法进行匹配,第一次出现“失配”(s!=t)时,i=j=5,则下次开始匹配时,i和j的值分别()。
A.i=1,j=0 B.i=5,j=0 C.i=5,j=2 D.i=6,j=27、下列关于无向连通图特性的叙述中,正确的是()。
Ⅰ.所有的顶点的度之和为偶数Ⅱ.边数大于顶点个数减1 Ⅲ.至少有一个顶点的度为1A.只有Ⅰ B.只有Ⅱ C.Ⅰ和Ⅱ D.Ⅰ和Ⅲ8、设X是树T中的一个非根结点,B是T所对应的二叉树。
在B中,X是其双亲的右孩子,下列结论正确的是()。
A.在树T中,X是其双亲的第一个孩子B.在树T中,X一定无右兄弟C.在树T中,X一定是叶结点D.在树T中,X一定有左兄弟9、一个具有1025个结点的二叉树的高h为()。
A.11B.10C.11至1025之间D.10至1024之间10、下列二叉排序树中查找效率最高的是()。
西电数据结构大作业
题目:数据结构上机报告学院:电子工程学院专业:信息对抗技术学生姓名:甘佳霖学号:14020310092西安电子科技大学数据结构课程实验报告实验名称线性表电子工程学院 1402031 班Array姓名甘佳霖学号 14020310092同作者实验日期 2017 年 3 月 18 日实验一线性表一、实验目的1.熟悉线性表的顺序和链式存储结构2.掌握线性表的基本运算3.能够利用线性表的基本运算完成线性表应用的运算二、实验要求1.设有一个线性表E={e1, e2, … , e n-1, e n},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ e n, e n-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。
2.已知由不具有头结点的单链表表示的线性表中,含有三类字符的数据元素(字母、数字和其他字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含有同一类的字符,且利用原表中的结点空间,头结点可另辟空间。
三、设计思路1.顺序表做逆置操作时将对应的首尾元素位置交换,单链表的指针end指向链表的末尾,指针start指向链表头结点,指针s用来找到指向end节点的节点,将指向链表末尾和头结点的存储内容交换,然后头结点指针指向下一节点,s指针从start节点开始遍历寻找指向end 指针的节点,并将end指针赋值为s指针,就完成了单链表的逆置,可以看出单链表和顺序表都可以完成线性表的逆置。
2.分解单链表的实现思路是首先新建3个循环链表,然后顺序遍历单链表,ASCII码判断链表中的元素属于哪一类元素,然后将这个元素添加到对应的循环链表中,从而实现分解单链表的功能。
四、运行结果1.单链表逆置:顺序表逆置:2.分解单链表五、实验总结线性表和单链表是最简单的、最常用的数据结构类型,是实现其他数据结构的基础,熟悉对它们的操作有助于后面对数据结构课程的学习和理解。
西电数据结构大作业
数据结构大作业姓名:苏洋班级:021051学号:02105017简单计算器C语言是目前国内外最广泛使用的程序设计语言之一。
它处理功能丰富、表达能力强、使用方便灵活、执行程序效率较高、可移植性强;既具有汇编语言的特点。
它具有较强的系统处理能力,可直接实现对系统硬件和外部接口的控制。
C语言是一种结构化程序设计语言,它支持自顶向下逐步求精的结构化程序设计技术。
另外,C语言程序的函数式结构也为实现程序的模块化设计提供了强有力的保障,目前,很多人就把C语言作为编程的首选语言。
一、简要功能计算器能够模拟windows系统的计算器的图形界面,用户能够用键盘输入相关数据,能够进行简单的加、减、乘、除运算,并且在程序运行过程中能够正常的退出程序。
在计算器程序运行中,输入数据时如果遇到输入错误的情况,能够能过键盘上的退格键进行删除,并且重新输入正确的数据。
在数据输入完成后,如果需要放弃本次计算操作,可以利用程序中设置好的按键进行清零,并为下一次运算作准备。
程序运行中如果遇到输入错误情况时能够相应的进行报错处理,提醒用户当前的错误输入情况。
二、设计思路先找出输入的字符串里最后一个出现(的位置,标记下来。
从这里开始向后找运算符,如果找到第一个子串为sin...,cos...则先把这一段子串提出,用MA TH函数计算它的值,再把值通过itoa函数转换成字符串替代到原字符串里。
再继续向后寻找,如果找到了第一个*或者/的位置,则再进行倒退寻找,找到这个*或者/的第一个操作数的最高位,将第一个数的字符串提出,用atoi 函数转换成数字存放在某个变量里,再提取运算符放在一个变量里,继续向后寻找,把运算符后面的数字字符串存储起来,再用atoi函数转换成数字,两数通过对运算符的switch case得到运算结果放在另一个变量里,再将这个结果转换成字符串替换原字符串里两个数包括运算符在内的所有字符,假如整个括号内只有数字没有运算符的话,将包括括号在内的整个字符串用括号内的字符串代替。
杭州电子科技大学数据结构数据结构试题及答案
杭州电子科技大学数据结构数据结构试题及答案一、选择题1. 下面哪一个不是线性结构的特点?()A. 有且只有一个根结点B. 每个结点最多有一个前驱,最多有一个后继C. 至少有一个结点D. 结构中任意两个结点都可以相邻答案:D解析:线性结构的特点包括有且只有一个根结点,每个结点最多有一个前驱,最多有一个后继,至少有一个结点。
而结构中任意两个结点都可以相邻并不是线性结构的特征。
2. 下面关于栈的叙述中,正确的是()A. 栈是一种先进先出的线性表B. 栈是一种后进先出的线性表C. 栈是一种随机存取的线性表D. 栈是一种非线性结构答案:B解析:栈是一种后进先出的线性表,即最后进入的元素最先被删除。
二、填空题3. 一个栈的初始状态为空。
首先将元素5、3、2依次进栈,然后退栈一次,再进栈一个元素6,然后再退栈三次,此时栈顶元素的值为______。
答案:2解析:元素进栈的顺序是5、3、2,退栈一次后栈顶元素是3,再进栈一个元素6,栈顶元素变为6,退栈三次后,栈顶元素是2。
4. 设栈S和队列Q的初始状态都为空。
元素a、b、c、d、e依次进栈S,然后再依次出栈,并将出栈的元素放入队列Q 中,则队列Q的元素顺序是______。
答案:e d c b a解析:元素a、b、c、d、e依次进栈后,出栈顺序是e、d、c、b、a,因此队列Q的元素顺序也是e、d、c、b、a。
三、判断题5. 在链表中,存储结点包含数据域和指针域两部分。
()答案:正确解析:链表中的每个存储结点确实包含数据域和指针域两部分,其中数据域存储元素值,指针域存储下一个结点的地址。
6. 二分查找法适用于顺序存储的有序表。
()答案:正确解析:二分查找法只适用于顺序存储的有序表,因为它是通过比较中间元素与目标值的大小来逐步缩小查找范围的。
四、应用题7. 设有一个长度为12的线性表,元素依次为(a1, a2, a3, ..., a12),采用二分查找法查找元素a7,请写出查找过程。
西安电子科技大学2021学年上学期 大作业-数据库应用系统
学习中心/函授站_姓名学号西安电子科技大学网络与继续教育学院2021 学年上学期《数据库应用系统》期末考试试题(综合大作业)考试说明:1、大作业试题于2021 年4 月23 日公布:(1)学生于2021 年4 月23 日至2021 年5 月9 日在线上传大作业答卷;(2)上传时一张图片对应一张A4 纸答题纸,要求拍照清晰、上传完整;2、考试必须独立完成,如发现抄袭、雷同均按零分计;3、答案须用《西安电子科技大学网络与继续教育学院标准答题纸》手写完成,要求字迹工整、卷面干净。
一填空题(每空 2 分,共 30 分)1.数据库是长期存储在计算机内、有组织的、可_ _的数据集合。
2.构成数据模型的三大要素是、数据操作和数据完整性约束。
3.SQL 语言支持关系数据库的三级模式结构,其中外模式对应于和部分本表,模式对应于基本表,内模式对应于。
4.在关系数据库的规范化理论中,在执行“分解”时,必须遵守规范化原则:既要保持关系,又要具有连接性。
5.在数据库系统中,数据的完整性是指数据的、、相容性。
6.MOD(8,-3)的值是。
7.分布式数据库是一组数据集,逻辑上它们属于同一系统,而在物理上分散在用计算机网络连接的多个场地上,并统一由一个管理。
8.关系数据操作语言(DML)的特点是:操作对象与结果均为关系、操作的、语言一体化、并且是建立在数学理论基础之上。
9.数据库的物理设计主要考虑三方面的问题:、分配存储空间、实现存取路径10. 命令?ROUND(12345.678,2)的结果是。
11.数据库完整性的静态约束条件分为:值的约束和。
12.构成系统说明书的两个重要文档是。
二单选题(每题1 分,共20 分)1.关系数据库管理系统都是基于()理论。
A. Codd 的数据关系模型B. 数据结构C. 计算机操纵系统D. 信息管理2.主属性的值不能为()A. 数值B. 空C. 字符D. A 和C3.在数据库中,与查询有关的是()A.数据依赖B.进程管理C.索引D.数据压缩4.关系数据库的三种运算不包括()。
八数码问题求解西安电子科技大学数据结构结课大作业
西安电子科技大学课程论文数据结构八数码问题求解班级:071271作者:方正阳学号:07127020时间:2013.12.17摘要:八数码求解问题是人工智能中一个很典型的智力问题。
本文套用经典宽度搜索框架来讨论八数码问题,给出了宽度优先搜索算法与实现的思想。
用链表法来表示邻接点的访问序列,从而完成对图的遍历。
根据宽度优先搜索的策略,被搜索到的顶点上的distance标记就是到源顶点的最短路径的距离,因此可以解决无权图的最短路径问题以及由其抽象而来的最优问题。
引言:八数码游戏(八数码问题)描述为:在3×3方格盘上,放有八个数码,剩下一个位置为空,每一空格其上下左右的数码可移至空格(可以看作是空格移动,它最多可以有4个方向的移动,即上、下、左、右),这样通过移动将牌就可以不断改变将牌的布局。
这种游戏求解的问题是:给定一种初始的将牌布局或结构(称初始状态)和一个目标的布局(称目标状态),问如何移动将牌,实现从初始状态到目标状态的转变。
一、需求分析初始状态:8个数字码和空格在3×3棋盘上的所有格局组成了问题的状态空间。
其中,状态空间中的任一种状态都可以作为初始状态。
后继状态:通过移动空格(上、下、左、右)和周围的任一棋子一次,到达新的合法状态。
目标测试:比较当前状态和目标状态的格局是否一致。
路径消耗:每一步的耗散值为1,因此整个路径的耗散值是从起始状态到目标状态的棋子移动的总步数。
具体要求:1.输入初始状态和目标状态的数据;例:初始状态:2 8 3 1 6 4 7 0 5 最终状态:1 2 3 8 0 4 7 6 52.实现从初始状态到目标状态的转换(如不能实现,程序应输出不能实现的提示信息);3.输出结果,每移动一步都必须在屏幕上显示:a、移动每一步时的序号,最后一步的序号即为移动总步数;b、每一步移动后以3x3表格形式显示状态。
4.要求能使移动步数尽可能少;二、程序设计1.变量说明:int num[9]; //棋盘状态int deepth; //派生的深度g(n)int diffnum; //不在位的数目h(n)int value; //耗散值f(n)=g(n)+h(n)int expand(numNode *item); //扩展节点int chu_shi_zhuang_tai[9]; //棋盘初始状态int mu_biao_zhuang_tai[9]; //棋盘目标状态int numNode_num,total_step; numNode *open,*close; //Open表和Close表2.函数声明:void print_num(int num[9]); //打印棋盘状态int print_result(numNode *item); //打印结果void init(); //初始化,获得棋盘初始状态和目标状态void swap(int *a,int *b);//交换2个数void open_insert(numNode *head,numNode *item); //向Open表中按序插入新节点void close_append(numNode *head,numNode *item); //向Close表中插入新节点3.算法分析:常用的状态空间搜索有深度优先和广度优先。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目:数据结构上机报告学院:电子工程学院专业:信息对抗技术学生姓名:***学号:***********西安电子科技大学数据结构课程实验报告实验名称线性表电子工程学院 1402031 班Array姓名甘佳霖学号 14020310092同作者实验日期 2017 年 3 月 18 日实验一线性表一、实验目的1.熟悉线性表的顺序和链式存储结构2.掌握线性表的基本运算3.能够利用线性表的基本运算完成线性表应用的运算二、实验要求1.设有一个线性表E={e1, e2, … , e n-1, e n},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ e n, e n-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。
2.已知由不具有头结点的单链表表示的线性表中,含有三类字符的数据元素(字母、数字和其他字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含有同一类的字符,且利用原表中的结点空间,头结点可另辟空间。
三、设计思路1.顺序表做逆置操作时将对应的首尾元素位置交换,单链表的指针end指向链表的末尾,指针start指向链表头结点,指针s用来找到指向end节点的节点,将指向链表末尾和头结点的存储内容交换,然后头结点指针指向下一节点,s指针从start节点开始遍历寻找指向end 指针的节点,并将end指针赋值为s指针,就完成了单链表的逆置,可以看出单链表和顺序表都可以完成线性表的逆置。
2.分解单链表的实现思路是首先新建3个循环链表,然后顺序遍历单链表,ASCII码判断链表中的元素属于哪一类元素,然后将这个元素添加到对应的循环链表中,从而实现分解单链表的功能。
四、运行结果1.单链表逆置:顺序表逆置:2.分解单链表五、实验总结线性表和单链表是最简单的、最常用的数据结构类型,是实现其他数据结构的基础,熟悉对它们的操作有助于后面对数据结构课程的学习和理解。
附录:单链表逆置代码如下://单链表逆置主文件.cpp#include<iostream.h>#include<stdio.h>#include"单链表结构类型定义.h"#include"建立单链表.h"#include"输出单链表.h"#include"单链表逆置.h"void main(){linklist*head;creat(head);print(head);invert(head);//调用单链表逆置的函数print(head);}//单链表结构类型定义.htypedef char datatype;typedef struct node{datatype data;struct node *next;}linklist;//建立单链表.hvoid creat(linklist*&head)//采用尾插法建立具有结点的单链表{char ch;linklist *s,*r;head=new linklist;r=head;while((ch=getchar())!='*'){s=new linklist;s->data=ch;r->next=s;r=s;}r->next=NULL;}//输出单链表.hvoid print(linklist *head){linklist*p=head->next;while(p!=NULL){cout<<p->data<<" ";p=p->next;}cout<<endl;}//单链表逆置.hvoid invert(linklist*head){linklist*p,*q,*r;p=head->next;q=p->next;while(q!=NULL){r=q->next;q->next=p;p=q;q=r;}head->next->next=NULL;head->next=p;}顺序表逆置代码如下://顺序表逆置主文件.cpp#include<iostream.h>#include<stdio.h>#include"顺序表结构类型定义.h" #include"建立顺序表.h"#include"输出顺序表.h"#include"顺序表逆置.h"void main(){sequenlist*L;creat(L);print(L);invert(L);//调用顺序表逆值的函数 print(L);}//顺序表的结构类型定义.htypedef char datatype;const int maxsize=1024;typedef struct{ datatype data[maxsize];int last;}sequenlist;//建立顺序表.hvoid creat(sequenlist*&L){L=new sequenlist;L->last=0;char ch;while((ch=getchar())!='*'){L->data[L->last]=ch;L->last++;}}//输出顺序表.hvoid print(sequenlist*L){for(int i=0;i<L->last;i++)cout<<L->data[i]<<" ";cout<<endl;}//顺序表逆置.hvoid invert(sequenlist*L){char mid;int i,j;i=0;j=L->last-1;while(i<j){mid=L->data[i];L->data[i]=L->data[j]; L->data[j]=mid;i++;j--;}}西安电子科技大学数据结构课程实验报告实验名称栈和队列电子工程学院 1402031 班Array姓名甘佳霖学号 14020310092同作者实验日期 2017 年 4 月 11 日实验二栈和队列一、实验目的1.熟悉栈和队列的顺序和链式存储结构2.掌握栈和队列的基本运算3.能够利用栈和队列的基本运算完成栈和队列应用的运算二、实验要求1.假设以数组sequ[m]存放循环队列的元素,同时设变量rear和quelen分别指示循环队列中队尾元素的位置和内含元素的个数。
编写实现该循环队列的入队和出队操作的算法。
提示:队空的条件:sq->quelen==0;队满的条件:sq->quelen==m。
2.设单链表中存放有n个字符,试编写算法,判断该字符串是否有中心对称的关系,例如xyzzyx是中心对称的字符串。
(提示:将单链表中的一半字符先依次进栈,然后依次出栈与单链表中的另一半字符进行比较。
)三、设计思路1.队列是一个先进先出的线性表,入队时,先判断队列是否已满,如果不满将元素插入到队尾,然后判断rear是否指向sequ[m],如果是,指向队尾指针rear+1,否者rear=sequ[0],队列内元素个数quelen+1。
出队时头指针front后移一位,如果front=sequ[m],front指向sequ[0],否则front++,quelen-1,从而实现入队与出队的操作。
2.要判断字符串是否中心对称,首先获取栈的长度N,将前N/2个元素(N为偶数)或前(N-1)/2个元素(N为奇数)顺序压入栈中,然后依次出栈(先进后出),与另一半元素依次对应比较,全为真则可判断字符串中心对称。
四、运行结果1.循环队列入队出队2.判断字符串中心对称五、实验总结通过这次实验,我掌握了栈和队列的基本原理,了解了对于栈和队列的操作,让我对栈和队列的知识有了更多的了解。
附录:1.循环队列入队出队代码//循环队列入队出队的主程序文件.cpp#include<iostream.h>#include<stdio.h>#include<stdlib.h>#include"循环队列的结构类型定义.h"#include"置空队.h"#include"入队.h"#include"出队.h"void main(){ qu *sq;datatype x, *p;int key;sq=new qu;setnull(sq);do{ cout<<"1.Enter Queue 2.Delete Queue -1.Quit:";cin>>key;switch(key){ case 1: cout<<"Enter the Data:"; cin>>x;enqueue(sq,x);break;case 2: p=dequeue(sq);if(p!=NULL) cout<<*p<<endl;break;case -1: exit(0);}}while(1);}//出队.hdatatype *dequeue(qu *sq){datatype *temp;if(sq->quelen==0){printf("队列为空,请先进行入队操作\n");return 0;}else{temp=(datatype*)malloc(sizeof(datatype)); sq->quelen--;*temp=sq->sequ[(sq->rear-sq->quelen+m)%m];cout<<"出队成功!\n";return (temp);}}//入队.hvoidenqueue(qu *sq, datatype x){if(sq->quelen==m)printf("队列已满,请先进行出队操作\n");else {sq->quelen++;sq->rear=(sq->rear+1)%m;sq->sequ[sq->rear]=x;cout<<"入队成功!\n";}}//循环队列的结构类型定义.hconstint m=5;typedefint datatype;typedefstruct{ datatypesequ[m];int rear, quelen;}qu;//置空队.hvoidsetnull(qu *sq){ sq->rear=m-1;sq->quelen=0;}2.判断字符串中心对称代码//判字符串中心对称的主程序文件.cpp#include<iostream.h>#include"单链表顺序栈结构类型定义.h"#include"置栈空.h"#include"求单链表长度.h"#include"输出单链表.h"#include"建立单链表.h"#include"顺序栈入栈.h"#include"顺序栈出栈.h"#include"判字符串是否中心对称.h"void main(){linklist *head;stack *s;datatypestr[80];cin>>str;creat(head,str);printlink(head);setnull(s);if(symmetry(head,s)) cout<<"字符串\""<<str<<"\"中心对称\n";else cout<<"字符串\""<<str<<"\"不是中心对称\n";}//定义单链表结构类型.htypedef char datatype;typedefstruct node{ datatype data;struct node *next;}linklist;//定义顺序栈结构类型constintmaxsize=40;typedefstruct{ datatype elements[maxsize];int top;}stack;//建立具有头结点的单链表.hvoidcreat(linklist *&head,datatype*str) { datatype *p=str;linklist *s,*r;head=new linklist;r=head;while(*p!='\0'){s=new linklist;s->data=*p;r->next=s;r=s;p++;}r->next=NULL;}//判断字符是否中心对称.hint symmetry(linklist*head,stack*s){int n=length(head)/2;linklist*p=head->next;datatype x;for(inti=0;i<n;i++){push(s,p->data);p=p->next;}if(length(head)%2==1)p=p->next;while(p!=NULL){x=pop(s);if(x==p->data)p=p->next;else return 0;}return 1;}//求单链表长度.hint length(linklist*head){ linklist *p=head->next;int n=0;while(p!=NULL){ n++; p=p->next; } return n;}//输出单链表.hvoidprintlink(linklist*head){ linklist *p=head->next;while(p!=NULL){ cout<<p->data;p=p->next;}cout<<endl;}//顺序栈出栈.hdatatype pop(stack*s){datatype temp;s->top--;temp=s->elements[s->top+1];return temp;}//顺序栈入栈.hvoid push(stack*s,datatype e){s->top++;s->elements[s->top]=e;}//置栈空.hvoidsetnull(stack *&s){s=new stack;s->top=-1;}西安电子科技大学数据结构课程实验报告实验名称数组电子工程学院 1402031 班Array姓名甘佳霖学号 14020310092同作者实验日期 2017 年 5 月 6 日实验三数组一、实验目的1.熟悉数组的结构2.掌握矩阵的进行运算二、实验要求若在矩阵A m×n中存在一个元素A[i-1[j-1],其满足A[i-1[j-1]是第i行元素中最小值,且又是第j列元素中最大值,则称此元素为该矩阵的一个马鞍点。