算法与数据结构

20182326 2019-2020-1 《数据结构与面向对象程序设计》实验六报告

半腔热情 提交于 2020-01-09 16:48:31
20182326 2019-2020-1 《数据结构与面向对象程序设计》实验六报告 课程:《程序设计与数据结构》 班级: 1823 姓名: 刘颖洁 学号:20182326 实验教师:王志强 实验日期:2019年10月21日 必修/选修: 必修 1.实验内容 1.链表练习,要求实现下列功能: 通过键盘输入一些整数,建立一个链表; 这些数是你学号中依次取出的两位数。 再加上今天的时间。 例如你的学号是 20172301 今天时间是 2018/10/1, 16:23:49秒 数字就是 20, 17,23,1, 20, 18,10,1,16,23,49 打印所有链表元素, 并输出元素的总数。 在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。 例如你叫 张三, 那么这个变量名就是 int nZhangSan = 0; //初始化为 0. 做完这一步,把你的程序签入源代码控制(git push)。 2.链表练习,要求实现下列功能: 实现节点插入、删除、输出操作; 继续你上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器; 从磁盘读取一个文件, 这个文件有两个数字。 从文件中读入数字1, 插入到链表第 5 位,并打印所有数字,和元素的总数。 保留这个链表,继续下面的操作。 从文件中读入数字2, 插入到链表第 0 位

数据结构与算法(2)顺序表和链表

旧时模样 提交于 2020-01-09 01:12:41
无需表List的操作如下 add(item):添加一个数据项到列表中,假设item原先不存在于列表中 remove(item):从列表中移除item,列表被修改,item原先应存放在表中 search(item):在列表中查找item,返回bool类型值 isEmpy() 返回列表是否为空 size():返回列表中包含多少数据项 append(item):添加一个数据项到表末尾,假设item原先不存在于列表中 index(item):返回数据项在表中的位置 insert(pos, item):将数据插入到位置pos,假设item原先不存在于列表中,同时原列表具有足够多个数据项,能让item占据位置pos pop():从列表末尾移除数项,假设原列表至少有一个数据项 pop(pos):移除位置为pos的数据项,假设原列表存在位置pos 采用链表实现无序表 数据项存放位置并没有规则,但是如果在数据项之间建立连接指向,就可保持其前后相对位置 第一个和最后一个数据项需要显式表现出来,一个是队首,,一个是队尾,后面再无数据了 链表实现 节点Node: 每个节点至少要包含两个信息:数据项本身,以及指向下一个节点的引用信息。 注意next为None的意义是没有下一个节点了,这点很重要 class Node: def __init__(self,initdata): self.data =

数据结构基础温故-4.树与二叉树(上)

孤者浪人 提交于 2020-01-09 00:33:45
前面所讨论的线性表元素之间都是一对一的关系,今天我们所看到的结构各元素之间却是一对多的关系。树在计算机中有着广泛的应用,甚至在计算机的日常使用中,也可以看到树形结构的身影,如下图所示的Windows资源管理器和应用程序的菜单都属于树形结构。树形结构是一种典型的 非线性 结构,除了用于表示相邻关系外,还可以表示层次关系。本文重点讨论树与二叉树的基本结构和遍历算法等内容。 一、好大一棵树,绿色的祝福 1.1 树的基本概念 Defination: 树(Tree)是 n(n≥0)个结点的有限集。n=0时,该树被称为“空树”。如上图所示,A点称为根节点,它有两棵子树,分别以B、C为根,而以C为根的子树又可以分成两棵子树。   1.2 树的基本术语   (1)不同的节点:根节点、内部节点、叶子节点以及节点的 度    (2)节点的关系:双亲与孩子,爸爸回来了,爸爸去哪儿?   (3)节点的层次:结点的层次(Level)从根开始定义起,根为第一层,根的孩子为第二层。树中结点的最大层次称为树的 深度 (Depth)或 高度 。 二、二叉树又是个什么鬼 2.1 从猜数字游戏引出二叉树   回忆一下,当年某电视节目中会让游戏参与者猜一个产品的价格,如果参与者在限定时间内猜对了,那么他就可以获得这个产品。很多人都是一点点的提高数值来猜,但是这样猜会很没有效率。因此

数据结构与算法练习---环形队列代码

北慕城南 提交于 2020-01-08 02:11:50
用数组来实现一个环形队列,关键在于找出判断队列是空还是满状态的条件和利用头指针front和尾指针rear来计算有效元素个数的公式。 设置front为头指针指向第一个元素,初始值为0. 设置rear为尾指针指向最后一个元素的后一个位置,初始值为0. maxSize为用来形成环形队列的数组的大小。 队列已满的条件:(rear + 1) % maxSize == front 队列为空的条件:rear == front 队列中有效元素的个数为: (rear + maxSize -front) % maxSize 代码如下: ```java package arrQueueDemo; import java.util.Scanner; public class CircleArrayQueue { //main方法用来测试环形队列 public static void main(String[] args) { //创建数组队列对象 CycArrayQueue arrQueue = new CycArrayQueue(4); char key = ' '; Scanner sc = new Scanner(System.in); boolean loop = true; while(loop) { System.out.println("输入a(add),向队列中添加数据!");

Java字典树(Trie)数据结构

做~自己de王妃 提交于 2020-01-07 18:51:08
Java字典树(Trie)数据结构 数据结构计算机编程中的关键内容,了解什么时候使用以及为什么使用是非常重要的。本文介绍字典树(Trie,发音try)数据结构,理解其实现并分析其复杂度。 1. 字典树(Trie) 字典树不是很知名,一般课程中提及不多,但不代表其不重要。有时也称为基数树和前缀树(因为能根据前缀进行搜索),它是基于树的数据结构,节点存储的字符(通常为字符串中的字符),通过向下遍历树的分支路径可以获得单词或字符串。 节点在树中的位置定义了与该节点相关联的键,这与二叉搜索树不同,二叉搜索树中节点存储的键只对应于该节点。节点所有后代具有相同的前缀,根节点关联空字符串。 首先看TrieNode节点类的实现: import java.util.HashMap; import java.util.Map; class TrieNode { private final Map<Character, TrieNode> children = new HashMap<>(); private boolean endOfWord; Map<Character, TrieNode> getChildren() { return children; } boolean isEndOfWord() { return endOfWord; } void setEndOfWord(boolean

面试常考的常用数据结构与算法【简】

↘锁芯ラ 提交于 2020-01-07 08:32:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 数据结构与算法,这个部分的内容其实是十分的庞大,要想都覆盖到不太容易。在校学习阶段我们可能需要对每种结构,每种算法都学习,但是找工作笔试或者面试的时候,要在很短的时间内考察一个人这方面的能力,把每种结构和算法都问一遍不太现实。所以,实际的情况是,企业一般考察一些看起来很基本的概念和算法,或者是一些变形,然后让你去实现。也许看起来简单,但是如果真让你在纸上或者是计算机上快速地完成一个算法,并且设计测试案例,最后跑起来,你就会发现会很难了。这就要求我们要熟悉,并牢固掌握常用的算法,特别是那些看起来貌似简单的算法,正是这些用起来很普遍的算法,才要求我们能很扎实的掌握,在实际工作中提高工作效率。遇到复杂的算法,通过分析和扎实的基本功,应该可以很快地进行开发。 闲话少说,下面进入正题。 一.数据结构部分 1. 数组和链表的区别 。(很简单,但是很常考,记得要回答全面) C++语言中可以用 数组 处理一组数据类型相同的数据,但 不允许动态定义数组的大小 ,即在使用数组之前必须确定数组的大小。而在实际应用中,用户使用数组之前有时无法准确确定数组的大小,只能将数组定义成足够大小,这样数组中有些空间可能不被使用,从而 造成内存空间的浪费 。 链表是一种常见的数据组织形式,它采用动态分配内存的形式实现 。需要时可以用

数据结构与算法学习task01

点点圈 提交于 2020-01-06 19:50:59
​​Task01:数组(1天) 理论部分 理解数组的存储与分类。 实现动态数组,该数组能够根据需要修改数组的长度。 练习部分 1. 利用动态数组解决数据存放问题 编写一段代码,要求输入一个整数N,用动态数组A来存放2~N之间所有5或7的倍数,输出该数组。 示例: 输入: N = 100 输出: 5 7 10 14 15 20 21 25 28 30 35 40 42 45 49 50 55 56 60 63 65 70 75 77 80 84 85 90 91 95 98 100 采用matlab代码编写(就是图个方便) function result = task01 ( n ) result = [ ] ; for i = 2:n+1 if mod ( i,5 ) == 0 || mod ( i,7 ) == 0 result = [ result i ] ; end end ​结果如下图所示: ​​​​​​​​ 2. 托普利茨矩阵问题 如果一个矩阵的每一方向由左上到右下的对角线上具有相同元素,那么这个矩阵是托普利茨矩阵。 给定一个M x N的矩阵,当且仅当它是托普利茨矩阵时返回True。 示例: ​ 输入 : matrix = [ [ 1 , 2 , 3 , 4 ] , [ 5 , 1 , 2 , 3 ] , [ 9 , 5 , 1 , 2 ] ] 输出 : True 解释

DW数据结构与算法学习任务----Task01:数组

╄→гoц情女王★ 提交于 2020-01-06 15:56:44
Task01:数组(1天) 目录 Task01:数组(1天) 理论部分 练习部分 1.利用动态数组解决数据存放问题 2.托普利茨矩阵问题 3.三数之和 理论部分 理解数组的存储与分类 实现动态数组,该数组能够根据需要修改数组的长度 答1:数组元素在内存中顺次存放,它们的地址是连续的。元素间 物理地址 上的相邻,对应着逻辑次序上的相邻。 练习部分 1.利用动态数组解决数据存放问题 编写一段代码,要求输入一个整数 N ,用动态数组 A 来存放 2~N 之间所有5或7的倍数,输出该数组。 示例: 输入: N = 100 输出: 5 7 10 14 15 20 21 25 28 30 35 40 42 45 49 50 55 56 60 63 65 70 75 77 80 84 85 90 91 95 98 100 思路:用Vector容器 # include <iostream> # include <vector> using namespace std ; int main ( ) { int n ; vector < int > v ; cin >> n ; for ( int i = 5 ; i <= n ; i ++ ) { if ( i % 5 == 0 || i % 7 == 0 ) { v . push_back ( i ) ; } } vector < int > ::

数据结构定义

余生长醉 提交于 2020-01-05 21:32:21
何谓数据结构 数据结构是在整个计算机科学与技术领域上广泛被使用的术语。它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系,而物理上的数据结构反映成分数据在计算机内部的存储安排。数据结构是数据存在的形式。 数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。 数据结构主要研究什么? 数据结构作为一门学科主要研究数据的各种逻辑结构和存储结构,以及对数据的各种操作。因此,主要有三个方面的内容:数据的逻辑结构;数据的物理存储结构;对数据的操作(或算法)。通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。 什么是数据结构?什么是逻辑结构和物理结构? 数据 是指由有限的符号(比如,"0"和"1",具有其自己的结构、操作、和相应的语义)组成的元素的集合。 结构 是元素之间的关系的集合。通常来说,一个 数据结构 DS 可以表示为一个二元组: DS=(D,S) , //i.e., data-structure=(data-part,logic-structure-part) 这里 D 是数据元素的集合(或者是“结点”,可能还含有“数据项”或“数据域”), S

数据结构的事件复杂度和空间复杂度

爱⌒轻易说出口 提交于 2020-01-04 09:06:02
事件复杂度和空间复杂度 数据结构01 算法的时间复杂度和空间复杂度 1、算法的概念: 算法 (Algorithm),是对特定问题求解步骤的一种描述。 算法五大特征 1. 输入 2. 输出 3. 有穷性 4. 确定性 5. 可行性 解决一个问题往往有不止一种方法,算法也是如此。那么解决特定问题的多个算法之间如何衡量它们的优劣呢?有如下的指标: 2、衡量算法的指标: (1)时间复杂度:执行这个算法需要消耗多少时间。 (2)空间复杂度:这个算法需要占用多少内存空间。 同一个问题可以用不同的算法解决,而一个算法的优劣将影响到算法乃至程序的效率。算法分析的目的在于为特定的问题选择合适算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。 算法在时间的高效性和空间的高效性之间通常是矛盾的。所以一般只会取一个平衡点。通常我们假设程序运行在足够大的内存空间中,所以研究更多的是算法的时间复杂度。 3、算法的时间复杂度   (1)语句频度T(n): 一个算法执行所花费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。而且一个算法花费的时间与算法中的基本操作语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度,记为T(n)。 关键要知道执行次数 ==