数据结构

数据结构习题之多维数组和广义表

二次信任 提交于 2020-03-01 06:57:10
第五章 多维数组和广义 表 一、基本要求、重点、难点 本章目的是介绍多维数组的逻辑结构特征及其存储方式。特殊矩阵和稀疏矩阵的压缩存储方法。本章重点是熟悉多维数组的存储方式、矩阵的压缩存储方式,难点是稀疏矩阵的压缩存储方示下实现的算法。 二、考核目标、考核要求 1.多维数组,要求达到“理解”层次 1.1多维数组的逻辑特征。 1.2多维数组的顺序存储结构及地址计算方式。 1.3数组是一种随机存取结构的原因。 2.矩阵的压缩存储,要求达到“理解”层次 2.1特殊矩阵和稀疏矩阵的概念。 2.2特殊矩阵的压缩存储时的下标变换方法。 2.3稀疏矩阵的三元组表表示方法及有关算法。 三、练习题 1.单项选择题 1.1二维数组M的元素是4个字符(每一个字符占一个存储单元)组成的串,行下标i的范围是从0到7,列下标j的范围从0到9。则存放M须要存储单元数为( D ) A) 360 B)480 C) 240 D) 320 凝视:由题目知:8*10*4=320。 1.2 N是一个5×8的二维数组,当N按行优先方式存储时,表示该数组的第10个元素的是( C ) A) N[2][2] B)N[2][1] C) N[1][1] D)N[1][2] 凝视:五行八列的数组的第十个的元素为N[1][1]元素为第二行第二列的元素。 1.3 二维数组M[i][j]的元素是4个字符(每一个字符占一个存储单元)组成的串

数据结构(十七)数组和矩阵

点点圈 提交于 2020-03-01 06:55:49
  一、数组的定义:数组是n(n>=1)个相同数据类型的数据元素构成的占用一块地址连续的内存单元的有限集合。所有的线性结构(包括线性表、堆栈、队列、串、数组和矩阵)的顺序存储结构实际上就是使用数组来存储。可见,数组是其他数据结构实现存续存储结构的基础,数组这种数据结构是软件设计中最基础的数据结构。   二、数组的实现机制:数组通常以字节为计数单位,同时根据内存单元地址映像公式来分配内存。用高级语言定义数组时,数组在内存中的首地址由系统动态分配并保存。高级语言通常用数组名保存在内存中的首地址。一旦确定了一个数组的首地址,系统就可计算出该数组中任意一个数组元素的内存地址。由于计算数组各个元素内存地址的时间相等,所以存取数组中任意一个元素的时间也相等,通常称具有这种特性的存储结构为随机存储结构。所以说数组具有随机存储结构的特性。   三、在数值分析中,常常会出现一些拥有许多相同数据元素或零元素的高阶矩阵。将具有许多相同元素或者零元素,且数据分布具有一定规律的矩阵称为特殊矩阵,例如,对称矩阵、三角矩阵和对角矩阵。为了节省存储空间,需要对这类矩阵进行压缩存储。压缩存储的原则是:多个值相同的矩阵元素分配同一个存储空间,零元素不分配存储空间。对于对称矩阵、三角矩阵和对角矩阵来说,首先根据矩阵中任意一个元素与压缩后一位数组的下标的对应关系得到每一个数据元素在数组中存储的位置

数据结构与算法单排日记-2020/2/29-数据结构综述

有些话、适合烂在心里 提交于 2020-03-01 06:55:44
1.栈——先进先出 入口出口在集合的一侧 2.队列——先进先出 入口和出口在集合的一侧 3.数组:查询快,增删慢 查询快 :数组的地址是 连续 的,通过数组的首地址找到数组,通过数组的索引可以快速查找某个元素 增删慢 :数组长度固定,想要增加/删除一个元素,必须创建一个新数组,把源数组复制过来 3.链表:查询慢,增删快 查询慢 :链表的地址是 不连续 的,每次查询元素都要从头开始 增删快 :链表结构,增加/删除一个元素,对链表的整体结构没有影响 链表中每一个元素成为节点,1个节点=1个数据源(存储数据)+2个指针域(存储地址) 类型 单向链表:只有一条链子,不能保证存储和取出的顺序一致 双向链表:两条链子,有一条链子专门记录元素的顺序 增删 5.红黑树:查询速度非常快 来源: CSDN 作者: Mango学习日记 链接: https://blog.csdn.net/wangzilong1995/article/details/104575824

【数据结构】数组和广义表

自作多情 提交于 2020-03-01 06:55:18
感觉数组这一段没讲什么太多的东西。 先是讲了下定义,就是每个维度上都有对应的前驱后继,首尾元素例外。操作只有初始化 销毁 取元素 修改元素。然后讲了下适合用顺序存储结构,多维情况下根据下标(j1 j2 j3 ... jn)找到对应像素的存储位置 c n = L, c i-1 = b i * c i, LOC = LOC基址 + Σc i j i , L为每个元素存储的单位。 然后给了些实现代码。 新知识是: va_start( , ); va_arg( , ); va_end(); 这三个可以用来处理变长参数表信息。 接着就是讲矩阵了。 首先是特殊矩阵的压缩。对于有规律的特殊矩阵,如对角矩阵、下(上)三角矩阵,对角矩阵。可以根据规律将矩阵存在一维数组中,建立起原始下标与压缩后矩阵下标的对应关系就好。 对没有规律的稀疏矩阵,只存储稀疏矩阵的非0元。需要三元组表存储(行、列、元素值)。根据三元组表的不同表示方式,得到稀疏矩阵不同的压缩存储方法。 ①三元组顺序表 以行序为主序排列。 就是用个数组存起来,行号小的放前面。 讲了下这种结构下转置的操作,关键讲了下如何在转置后以行为主排序。又讲了个快速转置,就是存储了原矩阵每一列首元素的位置和每一列元素个数,这样就不用在之后排序了,直接放在对的位置就好了。 ②行逻辑链接的顺序表,就是把每行第一个非0位置存了起来,为了方便抽取任意一行

数据结构: 树

我怕爱的太早我们不能终老 提交于 2020-03-01 05:59:23
树存储方式能提高数据存储,读取的效率. 二叉树: 二叉树的遍历 前序遍历: 先输出父节点,再遍历左子树和右子树。 中序遍历: 先遍历左子树,再输出父节点, 再遍历右子树。 后序遍历: 先遍历左子树,再遍历右子树, 最后输出父节点。 public class BinaryTreeDemo { public static void main(String[] args) { // 先创建一棵二叉树 BinaryTree binaryTree = new BinaryTree(); // 创建需要的结点 HeroNode root = new HeroNode(1, "宋江"); HeroNode node2 = new HeroNode(2, "吴用"); HeroNode node3 = new HeroNode(3, "卢俊义"); HeroNode node4 = new HeroNode(4, "林冲"); HeroNode node5 = new HeroNode(5, "关胜"); binaryTree.setRoot(root); root.setLeft(node2); root.setRight(node3); node3.setRight(node4); node3.setLeft(node5); // 前序遍历 System.out.println("前序遍历")

Redis数据结构——字典

∥☆過路亽.° 提交于 2020-03-01 04:09:29
除了用来表示数据库之外,字典也是哈希键的底层实现 typedef struct dictEntry { void *key; //键 union { //值 void *val; uint64_t u64; int64_t s64; double d; } v; struct dictEntry *next; //指向下个哈希表节点,形成链表 } dictEntry; typedef struct dictType { unsigned int (*hashFunction)(const void *key); void *(*keyDup)(void *privdata, const void *key); void *(*valDup)(void *privdata, const void *obj); int (*keyCompare)(void *privdata, const void *key1, const void *key2); void (*keyDestructor)(void *privdata, void *key); void (*valDestructor)(void *privdata, void *obj); } dictType; /* This is our hash table structure. Every dictionary has

数据结构-线性表-单链表

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-01 03:58:32
不带头结点的 单链表 (链式存储) 不要求逻辑上相邻的两个数据元素逻辑上也相邻,他们是通过"链",建立起数据元素之间的逻辑关系。因此对线性表的插入、删除 不需要移动数据元素,只需要修改"链" 。 例如:画出26个字母的链式存储结构 逻辑结构:(a,b,c,…,x,y,z) 链式存储结构: 结点由两个域组成: 数据域 :存储元素数值数据 指针域 :存储直接后继结点的存储位置 与链式存储有关的术语 结点:数据元素的存储映像。由数值域和指针域两部分组成。 链表:n个结点由链指针组成一个链表。他是线性表的链式存储映像,称为线性表的链式存储结构。 单链表:结点只有一个指针域的链表。 双链表:有两个指针域的链表。 循环链表:首尾相接的链表。 头指针、首元结点 头指针:指向链表中第一个结点的指针。 首元结点:链表中存储第一个数据元素a1的结点。 空表 非空表 单链表是由表头唯一确定,因此单链表可以用头指针的名字来命名。若头指针是head,则把链表称之为表head。 建立一个空的单链表 : node * init ( ) { return NULL ; } 遍历操作 工作指针后移,从首结点出发,通过工作指针的反复后移而将整个单链表"审视"一次的方法。 输出单链表中各个结点的值 void display ( linklist head ) { linklist p ; p = head ; if (

算法的窥探

那年仲夏 提交于 2020-03-01 03:41:39
计算机语言能对计算的控制是有限的, 最大程度的交互就是游戏, 而计算机对问题的求解是无限度的.本篇是对计算机数据结构以及算法的使用做一些探索. 本篇探讨的是: 什么是数据结构? 为什么需要数据结构 ? 为什么使用算法? 怎样掌握他们? 在探索之前, 先要提到的是数学建模. 一个苹果从空中落下来, 它的运动情况是符合这个公式的. H= 1/2g t^2 你可以依据这个模型, 知道不同T情况下的H , 对这个现实问题的情况进行更好的预测和处理. 这个过程, 就是对现实问题的求解, 是数学建模. 编程也是对现实问题的求解. 而数据结构与算法是在计算机领域的建模. 程序建模一般符合这样的三个过程. 1. 数据结构 最基本的数据结构, 其实是变量, 我们通常编程用到的最简单的数据结构, 基于变量之上的编程, 是最初级的编程. 使用了复杂一点数据结构, 并在其上编程, 取决于面对的问题. 通常情况下 , 使用的数据结构越复杂, 其编程能力越强, 对去现实问题的求解越强 选择合适的数据结构, 应当考虑所选择结构的排列规则, 以及利用该的运算特性 2. 算法 算法是问题求解的一个子模块, 又是一个庞大的体系, 初学使用, 应每一个数据结构下着重掌握其中一个算法, (例如线性结构, 就掌握快速排序; 图形结构, 掌握最短路径) 将精力集中于, 使用而不是在算法的理论的掌握上, 理论的掌握需要日积月.

数据结构中的逻辑结构和物理结构

有些话、适合烂在心里 提交于 2020-03-01 03:01:07
逻辑结构和物理结构是数据结构中重要的两个概念。 所谓逻辑结构,简单来说就是理解上的两个数据元素的关系,它很直观。学术点说就是数据对象中两个数据元素之间的相互关系,一般可以用一种偏序表示方法进行表示。可以简单的认为,我们学习数据结构就是学习数据元素的逻辑结构。逻辑结构可以划分为: 集合: 顺序结构:比如 线性表、链表、队列、栈 非顺序结构: ​ 树型结构: 比如 二叉树、堆 ​ 图型结构: 图 物理结构是指逻辑上的数据关系在计算机中存储形式,可以有: 顺序结构、链式结构、索引结构、散列结构(哈希表是一种存储结构) 这里提一下索引和散列区别: 索引一般需要建立一张索引表,将数据元素对应起来,这张索引表可以是多级的,一个典型的应用就是操作系统中的目录系统。 而散列一般是通过散列函数进行的,它需要对数据元素求hash值(一般用取模运算),直接得到该元素对应的数据元素或物理位置。 Notice 无论何种物理结构,在计算上进行存储的时候,只有两种方式: 一种是连续的方式,此时需要分配连续的内存 一种是非连续的方式,分配的内存不需要连续,但是需要用链表连接起来。 来源: CSDN 作者: 庐州小白 链接: https://blog.csdn.net/weixin_42194781/article/details/104579409

数据结构—排序

谁说我不能喝 提交于 2020-03-01 02:54:30
排序:假设含有 n 个记录的序列为 ,其相应的关键字分别为 ,需确定 的一种排列 ,使其相应的关键字满足 ( 非递减或非递增 )关系,即使得序列成为 一个按关键字有序的序列 ,这样的操作就称为 排序 。 相信大家都有着极其丰富的网上购物的经验,现在网上购物已经非常成熟,对用户来说带来了很大的方便。 假如我想买一台 iPhone4 的手机,于是上了某电子商务网站去搜索。可搜索后发现(如下图所示),有 8863 个相关的物品,如此之多,这叫我如何选择。我其实是想买便宜一点的,但是又怕遇到骗子,想找信誉好的商家,如何做? 下面的有些购物达人给我出主意了,排序呀。对呀,排序就行了(如下图所示)。我完全可以根据自己的需要对搜索到的商品进行排序,比如按信用从高到低、再按价格从低到高,将最符合我预期的商品列在前面,最终找到我愿意购买的商家,非常的方便。 网站是如何做到快速地将商品按某种规则有序的呢?—— 排序 。 1. 排序的基本概念与分类 排序是我们生活中经常会面对的问题。同学们做操时会按照从矮到高排列;老师查看上课出勤情况时,会按学生学号顺序点名;高考录取时,会按成绩总分降序依次录取等。那排序的严格定义是什么呢? 假设含有 n 个记录的序列为 ,其相应的关键字分别为 ,需确定 1,2,…… ,n 的一种排列 ,使其相应的关键字满足 ( 非递减或非递增 )关系