数据结构
大学期间数据结构课程实习记录
xulijian1009
这个作者很懒,什么都没留下…
展开
-
数据结构入门----赫夫曼Huffman树及其应用
最优二叉树(霍、赫、哈夫曼树)路 径: 由一结点到另一结点间的分支所构成。路径长度: 路径上的分支数目。a→e的路径长度=2树的路径长度: 从树根到每一结点的路径长度之和。树长度=10带权路径长度: 结点到根的路径长度与结点上权的乘积。树的带权路径长度: 树中所有叶子结点的带权路径长度之和。哈 夫 曼 树:带权路径长度最小的二叉树。Huffman树简介树的带权路径长度Weighted Path Length哈夫曼树则是:WPL 最小的二叉树。有n个权值分别为..原创 2020-07-08 19:54:36 · 650 阅读 · 0 评论 -
数据结构入门----树和森林的概念及应用
1. 树和森林的存储方式什么是存储结构? 数据元素以及数据元素之间的逻辑关系在存储器中的表示。实现树的存储结构,关键是什么? 如何表示树中结点之间的逻辑关系。树中结点之间的逻辑关系是什么? 一对多思考问题的出发点:如何表示结点的双亲和孩子树有三种常用存储方式: ①双亲表示法 ②孩子表示法 ③孩子兄弟表示法 1、用双亲表示法来存储思路:用一组连续空间来存储树的结点,同时在每个结点中附设一个指示器,指示其双亲结点在链表中的位置。缺点:求结点的孩...原创 2020-07-08 19:35:17 · 2381 阅读 · 0 评论 -
数据结构入门----遍历二叉树和线索二叉树
遍历二叉树(Traversing Binary Tree)二叉树的遍历是指从根结点出发,按照某种次序访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次。实际应用中,查找树中符合条件的结点,或对结点进行的各种处理,这里简化为输出结点的数据。 线性结构:容易解决。二叉树遍历操作的结果----非线性结构线性化考虑二叉树的组成:如果限定先左后右,则二叉树遍历方式有三种: 前序(根):DLR; 中序(根):LDR ;后序(根):LRD注:“先、中、后”的意思是指访问的结点D是先于原创 2020-07-08 19:18:53 · 916 阅读 · 1 评论 -
数据结构入门----树和二叉树的概念及应用
特点:非线性结构,一个直接前驱,但可能有多个直接后继(1:n)树的基本概念1. 树的定义树是n个(n≥0)结点的有限集。在任意一颗非空树中(1)有且仅有一个结点称为根(root)(2)当n>1时,其余的结点分为m(m>0)个互不相交的有限集合T1,T2,…,Tm。每个集合本身又是一棵树,被称作这个根的子树 。树的抽象数据类型定义树的表示法嵌套集合表示法目录表示法图形表示法广义表表示法 左孩子-右兄弟表示法图形表示法...原创 2020-07-08 19:55:49 · 753 阅读 · 0 评论 -
数据结构入门----数组和广义表的概念及应用
已经学过的线性表:数据元素都是非结构的原子类型。数组和广义表的特点:一种特殊的线性表① 元素的值并非原子类型,可以再分解,表中元素也是一个线性表(即广义的线性表)。即数据元素本身也是一个数据结构。② 所有数据元素仍属同一数据类型。数组的定义数组: 由一组名字相同、下标不同的变量构成。一维数组的特点:1个下标,ai 是ai+1的直接前驱二维数组的特点:2个下标,每个元素ai,j受到两个关系(行关系和列关系)的约束:一个m×n的二维数组可以看成是m行的一维数组,或者n列的一维原创 2020-07-08 17:34:44 · 2430 阅读 · 0 评论 -
数据结构入门----串的概念及应用
三种特殊的线性表——栈、队列、串从数据结构角度看,栈和队列是操作受限的线性表,他们的逻辑结构相同。 串是重要的非数值处理对象,它是以字符作为数据元素的线性表。 串类型的定义串:即字符串,是由零个或多个字符组成的有限序列,是数据元素为单个字符的特殊线性表。串长:串中字符个数(n≥0). n=0 时称为空串。 空白串:由一个或多个空格符组成的串。 字符位置:字符在串中的序号。 串相等:串长度相等,且对应位置上字符相等。子串:串中任意个连续的字符组成的子序列。 主串..原创 2020-07-08 15:55:06 · 2153 阅读 · 0 评论 -
数据结构入门----队列的概念及应用
队列的逻辑结构队列:只允许在一端进行插入操作,而另一端进行删除操作的线性表。空队列:不含任何数据元素的队列。允许插入(也称入队、进队)的一端称为队尾,允许删除(也称出队)的一端称为队头。队列的操作特性:先进先出FIFO队列的抽象数据类型定义InitQueue (&Q) (构造空队列 ) 操作结果:构造一个空队列Q。DestroyQueue (&Q) (销毁队列结构)ClearQueue (&Q) (队列清空)Queue...原创 2020-07-08 13:24:46 · 618 阅读 · 0 评论 -
数据结构入门----栈的概念及应用
栈的逻辑结构栈:限定仅在表尾进行插入和删除操作的线性表。(a1, a2, ……, an)空栈:不含任何数据元素的栈。允许插入和删除的一端称为栈顶,另一端称为栈底。插入:入栈、进栈、压栈删除:出栈、弹栈栈的操作特性:后进先出为原则LIFO注意:栈只是对表插入和删除操作的位置进行了限制,并没有限定何时进行插入和删除操作。栈的抽象数据类型定义InitStack (&S) (构造空栈 ) 操作结果:构造一个空栈S。DestroyStack(&...原创 2020-07-07 16:31:44 · 565 阅读 · 0 评论 -
数据结构入门----链表的概念及应用
链表的表示链式存储特点逻辑上相邻,物理上不一定相邻链表存放示意图:每个存储结点都包含两部分:数据域和指针域(链域) 。在单链表中,除了首元结点外,任一结点的存储位置由 其直接前驱结点的链域的值 指示。与链式存储有关的术语1)结点:数据元素的存储映像。由数据域和指针域两部分组成;2)链表: n 个结点由指针链组成一个链表。它是线性表的链式存储映像,称为线性表的链式存储结构。3)单链表、双链表、多链表、循环链表: 结点只有一个指针域的链表,称...原创 2020-07-07 14:07:14 · 1500 阅读 · 0 评论 -
数据结构入门----顺序表的概念及应用
线性表的类型定义线性结构的定义:若结构是非空有限集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。线性结构表达式:(a1 , a2 , ……, an):(a1 , a2 , ……, an) ,是一个有序(次序)集 。线性结构的特点:① 只有一个首结点和尾结点; ② 除首尾结点外,其他结点只有一个直接前驱和一个直接后继。简言之,线性结构反映结点间的逻辑关系是 一对一 的。线性结构包括线性表、堆栈、队列、字符串、数组等等,...原创 2020-07-07 11:24:11 · 1192 阅读 · 0 评论 -
数据结构入门----数据结构与算法基本概念
什么是数据结构 数据结构研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等用途计算机内的数值运算依靠数学方程,而非数值运算(如表、树、图等)则要依靠数据结构。同样的数据对象,用不同的数据结构来表示,运算效率可能有明显的差异。程序设计的实质是对实际问题选择一个好的数据结构,加之设计一个好的算法。而好的算法在很大程度上取决于描述实际问题的数据结构。 程序=数据结构+算法 ①提高复杂程序设计的能力 ②培养算法设计能力 ③为后继课程打基础 ...原创 2020-07-07 00:04:39 · 1499 阅读 · 0 评论 -
数据结构入门----构造无向图,深度和广度遍历
一. 实验要求实现利用邻接矩阵构造无向图的算法,在此基础上进行深度优先遍历和广度优先遍历。二. 实验目的通过该实验,使学生掌握图的几种存储结构,理解图的深度优先和广度优先遍历算法的思想和实现办法三、设计思想1.创建网图。网图是利用邻接矩阵来存储的。先从键盘输入图的顶点树vex和边数arc。创建一个正方形矩阵,边数等于vex。然后输入这vex个顶点的符号。再输入图中i个顶点和j个顶点相连,使矩阵中的第i行第j列和第j行第i列的值为1,表示两个顶点i和j相通,矩阵中其他元素的值为0,表示这两个顶点原创 2020-07-04 12:59:56 · 803 阅读 · 0 评论 -
数据结构入门----二叉树的应用
一. 实验要求实现二叉树创建算法,在此基础上实现二叉树的先序、后序递归遍历算法、两种非递归中序遍历、层序遍历、求二叉树的深度。注意:在非递归算法中用到栈和队列时,不要调用系统的栈和队列,需要自己实现栈和队列的操作。二. 实验目的通过该实验,理解二叉树的链式存储,掌握二叉树的几种遍历算法,并理解递归的含义,掌握C语言编写递归函数的方法和注意事项。三. 设计思想1.首先进行先序创建二叉树。从键盘输入字符c,如果c是‘$’则说明该结点是空;否则,为该结点申请一个空间,让数据data等于c,接着利原创 2020-07-04 12:55:08 · 2620 阅读 · 0 评论 -
数据结构入门----矩阵的两种转置运算
一. 实验要求用三元组表压缩存储矩阵,实现创建矩阵、显示以及教材中介绍的两种转置算法。二. 实验目的通过该实验,理解矩阵压缩存储的概念、方法等相关知识,掌握用三元组表方式如何进行矩阵的压缩存储,并在此基础上进行转置操作,理解转置和快速转置两种矩阵转置算法的思想。三. 设计思想首先,构建稀疏矩阵的三元组顺序表存储单元。一个结点的定义:假设非零元个数的最大值为125000,定义非零元的行下标j,列下标k,元素值e;还有整个三元组表的定义:数据data(数据从data[1]开始存,data[0]原创 2020-07-04 12:43:20 · 3277 阅读 · 2 评论 -
数据结构入门----链队列的基本操作
一. 实验要求用链式存储结构,实现教材定义的队列的基本操作。二. 实验目的通过该实验,使学生理解链队列的构造特点并灵活应用,掌握链队基本操作的编程实现,认识栈是在一端进行插入,在另一端进行删除集中操作的线性结构,掌握队列的“先入先出”操作特点,知道判断队列空和满的条件,进一步熟悉C语言中指针操作。三. 设计思想1.定义队列的链式存储结构,节点信息data、next,队列指针队头front、队尾rear,并且打出字幕的函数。2.初始化队列,先申请队列Q的存储空间,构造一个空队列Q,一开始让Q原创 2020-07-04 12:37:37 · 1758 阅读 · 1 评论 -
数据结构入门----顺序栈的基本操作
一. 实验要求用顺序存储结构,实现教材定义的栈的基本操作,提供数制转换功能,将输入的十进制整数转换成二进制。二. 实验目的通过该实验,让学生掌握栈的相关基本概念,认识栈是插入和删除集中在一端进行的线性结构,掌握栈的“先入后出”操作特点。栈在进行各类操作时,栈底指针固定不动,掌握栈空、栈满的判断条件。三. 设计思想首先声明全局变量checkStatus用于判断栈是否创建,定义栈的顺序存储表示,定义ElemType类型的栈顶指针top,栈底指向base和栈的元素数量stacksize初始化为原创 2020-07-04 12:31:55 · 952 阅读 · 0 评论 -
数据结构入门----链表的基本操作
一、实验目的通过该实验,深入理解链表的逻辑结构、物理结构等概念,掌握链表基本操作的编程实现,熟练掌握C语言中指针的操作。和实验3对比,掌握线性结构两种不同存储方式的区别。二、实验内容编程实现链表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。注意,每个功能模块一定要考虑非法的情况,并作出相应的提示,例如:求前驱,要分别能够测试第一个元素的前驱、其他正常的元素的前驱、输入一个在表中不存在的元素求其前驱,这三种情况应给出相应的提示语和结果值。三、主要源代码#i原创 2020-07-04 12:29:57 · 210 阅读 · 0 评论 -
数据结构入门----顺序表的基本操作
(1)实验目的通过该实验,深入理解顺序表的逻辑结构、物理结构等概念,掌握顺序表基本操作的编程实现,注意顺序表插入、删除等操作过程中数据元素的移动现象,培养学生编写程序时,要考虑程序的强壮性,熟练掌握通过函数参数返回函数结果的办法。(2)实验内容编程实现顺序表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编成一个完整的小软件。(3)参考界面注:销毁是指free(L.elem); L.elem=NULL; L.length=0; L.listsize=0; return TRUE原创 2020-07-04 12:24:12 · 2909 阅读 · 0 评论 -
数据结构入门----集合的交、并、差
一. 实验要求通过键盘,分别输入两个数据元素类型为正整数的集合A和B,以负数输入为结束条件,输出两个集合的交、并、差。从程序完善性上考虑,集合元素输入时,要有检查元素重复的功能。集合可以用数组也可以用链表存储。二. 实验目的通过该实验,进一步让学生熟练掌握循环结构、循环控制条件、分支结构和数组/链表基本操作的实现,掌握函数参数设定的有关内容,体会到用数组存储集合时,需要记录集合元素的个数,否则输出结果会出现数据越界现象。三. 设计思想分别将数据输入到2个int类型的数组中,在输入过程中判断原创 2020-07-04 12:15:54 · 4733 阅读 · 0 评论 -
数据结构入门----多个数的求和、平均、最大值、最小值
一. 实验要求通过键盘输入整数,直到遇到一个负数为止,该负数不考虑在内,求所输整数的合、平均值、最大值和最小值,并在屏幕上输出。二. 实验目的通过该实验,让学生对上学期所学C语言的相关内容进行回顾和熟悉,特别是顺序结构、循环结构和分支结构,熟悉C中对数组相关操作的实现。三. 设计思想将数据输入到一个 int 类型的数组中,在输入过程中判断输入类型是否有误。利用 for 循环进行数组的遍历加和;利用强制类型转换进行平均值的计算将数组的第一个元素定义为最大值,然后进行数组遍历,找到比第一个原创 2020-07-04 12:14:21 · 1647 阅读 · 0 评论