大家好,今天小编关注到一个比较有意思的话题,就是关于顺序存储结构c语言的问题,于是小编就整理了3个相关介绍顺序存储结构c语言的解答,让我们一起看看吧。
1下述哪一条是顺序存储结构的优点?
顺序存储结构的主要优点是节省存储空间,因为分配给数据的存储单元全用存放结点的数据(不考虑c/c++语言中数组需指定大小的情况),结点之间的逻辑关系没有占用额外的存储空间。***用这种方法时,可对结点的随机存取,即每一个结点对应一个序号,由该序号可以直接计算出来结点的存储地址。但顺序存储方法的主要缺点是不便于修改,对结点的插入、删除运算时,可能要移动一系列的结点。
栈的入栈顺序和出栈顺序的各种可能?
举一个例子吧。入栈顺序:a、b、c、d 出栈顺序可以是:d、c、b、a;a、b、c、d;b、a、c、d很多啦, 但要把栈想像成一个没盖子的纸箱,取出东西时只能从最上层取,放进东西也只能放在最上层,所以栈是一个“后进先出”或“先进后出”的顺序存储结构。
举一个例子吧。
入栈顺序:a、b、c、d 出栈顺序可以是:d、c、b、a;a、b、c、d;b、a、c、d很多啦, 但要把栈想像成一个没盖子的纸箱,取出东西时只能从最上层取,放进东西也只能放在最上层,所以栈是一个“后进先出”或“先进后出”的顺序存储结构。顺序存储的二叉树是如何创建和遍历的?
(1)当n=0时,为空树;
(2)当n=1时,只有一个结点,该节点称为根结点;
(3)当n>1时,除了根结点外的其他节点可分为互不相交的两个子集,称为左右子树,且左右子树本质上也都是二叉树。
图1 二叉树
(1)非空二叉树的第i层最多有2∧(i-1)个结点;
(2)深度为k的二叉树最多有2∧k-1个结点
二叉树是非线性的结构,其每个结点最多有一个“前驱”,但可以有多个“后继”。它可以***用顺序存储结构和链式存储结构。
说一下创建,因为底层存储一般都选择数组和链表,所以对二叉树有一定的要求,存储完全二叉树选择数组存储,比较节省空间,而且通过下标可以快速访问元素;非完全二叉树使用数组存储会有很多空洞,可以选择链表,用指针来指向左右节点。
对于一棵完全二叉树,为了便于计算和记忆,我们需要申请一个内存空间是树的元素数量+1的内存地址,比如需要建一个10个元素的树,则需要申请11个的内存空间。将树的根节点存储在下标为1的位置,浪费下标为0的位置,便于寻找时少做一次算数运算。
因此,数组下标为1的位置存储根节点,推断就是对于下标 i,下标 2*i 的位置存储左子节点,下标 2*i + 1 存储右子节点,i/2 存储父节点。
借王争老师的图,比如完全二叉树
存储过程就是下标为1的位置存储根节点A,那根据公式 2*i = 2*1 = 2 的位置存储左子节点B,2*i + 1 = 2*1 +1 = 3 的位置存储右子节点C,根据下标依次推断即可。遍历的话就简单了,只需要知道根节点位置,而根节点一般选择下标1,都是明确的位置。
到此,以上就是小编对于顺序存储结构c语言的问题就介绍到这了,希望介绍关于顺序存储结构c语言的3点解答对大家有用。