精华内容
下载资源
问答
  • 在顺序存储结构中
    千次阅读
    2019-06-12 14:05:00

    顺序存储结构

    顺序存储中,相邻数据元素的存放地址也相邻,内存中存储单元的地址必须是连续的,存储密度 = 1。

    优点:

    • 不用为表示节点间的逻辑关系而增加额外的存储开销。

    • 具有按元素序号随机访问的特点。

    缺点:

    • 在做插入/删除操作时,平均每次移动表中的一半元素,因此表中数据量越大效率越低。

    • 需要预先分配足够大的存储空间。过大可能会导致存储空间闲置,过小会造成溢出。

    使用:

    • 线性表的长度变化不大,且其主要操作是查找。

    链式存储结构

    链式存储中,逻辑上相邻的数据元素,物理存储位置不一定相邻,使用指针实现元素之间的逻辑关系。链表的存储空间是动态分配的,存储密度 < 1。

    优点:

    • 插入/删除方便(只需要修改指针)。

    缺点:

    • 要占用额外的存储空间存储元素之间的关系,存储密度低。

    • 不是随机存储结构,不能随机存取元素,只能顺序存取。

    使用:

    • 线性表的长度变化较大,且其主要操作是插入/删除。

     

    ps:存储密度是指一个节点中数据元素所占的存储单元和整个节点所占的存储单元之比

    posted on 2019-06-12 14:05 Helios_Fz 阅读( ...) 评论( ...) 编辑 收藏

    转载于:https://www.cnblogs.com/helios-fz/p/11009274.html

    更多相关内容
  • 二叉树的顺序存储结构

    千次阅读 2021-02-05 10:01:58
    二叉树的顺序存储结构是指用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素,即将完全二叉树上编号为 i 的结点元素存储一维数组下标为 i-1 的分量。 依据二叉树的性质,完全二叉树和...

    一、顺序存储结构

    二叉树的顺序存储结构是指用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素,即将完全二叉树上编号为 i 的结点元素存储在一维数组下标为 i-1 的分量中。

    依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映结点之间的逻辑关系,这样既能最大地节省存储了空间,又能利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系。

    从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树可以转换成数组。

    二、顺序存储二叉树的特点

    1、顺序二叉树通常只考虑完全二叉树和满二叉树
    2、 第n个元素的左子结点为 2 * n + 1
    3、第n个元素的右子结点为 2 * n + 2
    4、 第n个元素的父结点为 (n-1) / 2
    n表示二叉树中的第几个元素,按0开始编号

    在这里插入图片描述
    例如,第一个元素2的左子结点为 21+1=3,即为第三个元素4;右子结点为 21+2=4,即为第四个元素5;父结点为(1-1) / 2=0,即为第零个元素1。

    三、遍历顺序存储二叉树

    package Tree;
    
    public class ArrayBinaryTree {
    
    	public static void main(String[] args) {
    		int[] arr= {1,2,3,4,5,6,7};
    		ArrBinaryTree arrBinaryTree=new ArrBinaryTree(arr);
    		System.out.println("顺序存储二叉树的前序遍历");
    		arrBinaryTree.preOrder(0);
    		System.out.println();
    		System.out.println("顺序存储二叉树的中序遍历");
    		arrBinaryTree.inOrder(0);
    		System.out.println();
    		System.out.println("顺序存储二叉树的后序遍历");
    		arrBinaryTree.postOrder(0);
    		System.out.println();
    
    	}
    }
    
    class ArrBinaryTree{
    	int[] arr;//用于存储数据结点的数组
    	
    	public ArrBinaryTree(int[] arr) {//ArrBinaryTree构造函数
    		this.arr=arr;
    	}
    	
    	//顺序存储二叉树的前序遍历(根->左->右)
    	public void preOrder(int index) {
    		if(arr==null||arr.length==0) {//如果数组为空,或者数组长度为零无法遍历
    			System.out.println("数组为空,不能执行二叉树的前序遍历");
    		}
    		
    		System.out.printf(arr[index]+" ");//打印当前结点
    		if((index*2+1)<arr.length) {//当前结点的左子结点没有越界则向左递归前序遍历
    			preOrder(index*2+1);
    		}
    		if((index*2+2<arr.length)) {//当前结点的右子结点没有越界则向右递归前序遍历
    			preOrder(index*2+2);
    		}
    	}
    	//顺序存储二叉树的中序遍历(左->根->右)
    	public void inOrder(int index) {
    		if(arr==null||arr.length==0) {//如果数组为空,或者数组长度为零无法遍历
    			System.out.println("数组为空,不能执行二叉树的中序遍历");
    		}
    		
    		if((index*2+1)<arr.length) {//当前结点的左子结点没有越界则向左递归前序遍历
    			preOrder(index*2+1);
    		}
    		System.out.printf(arr[index]+" ");//打印当前结点
    		if((index*2+2<arr.length)) {//当前结点的右子结点没有越界则向右递归前序遍历
    			preOrder(index*2+2);
    		}
    	}
    	
    	// 顺序存储二叉树的后序遍历(左->右->根)
    	public void postOrder(int index) {
    		if(arr==null||arr.length==0) {//如果数组为空,或者数组长度为零无法遍历
    			System.out.println("数组为空,不能执行二叉树的中序遍历");
    		}
    		
    		if((index*2+1)<arr.length) {//当前结点的左子结点没有越界则向左递归前序遍历
    			preOrder(index*2+1);
    		}
    		if((index*2+2<arr.length)) {//当前结点的右子结点没有越界则向右递归前序遍历
    			preOrder(index*2+2);
    		}
    		System.out.printf(arr[index]+" ");//打印当前结点
    	}
    }
    

    运行结果:

    顺序存储二叉树的前序遍历
    1 2 4 5 3 6 7 
    顺序存储二叉树的中序遍历
    2 4 5 1 3 6 7 
    顺序存储二叉树的后序遍历
    2 4 5 3 6 7 1 
    
    展开全文
  • 线性表的顺序存储结构

    千次阅读 2022-04-03 16:41:58
    线性表的基本概念 ...线性表的顺序存储结构 通常,线性表可以采用顺序存储和链式存储两种存储结构 顺序存储是存储线性表最简单的结构,具体做法是将线性表的元素一个接一个地存储一片相邻的存储区域。这种顺

    线性表的基本概念

    线性结构习惯称为线性表,线性表是n(n>=0)个数据元素构成的有限序列,表中除第一个元素外的每一个元素,有且只有一个一个前件;除最后一个元素外,有且只有一个后件。

    非空数据表具有:

    • 只有一个根节点,首元素无前件
    • 有且只有一个终端节点,末尾元素无后件
    • 除收尾节点外,其他所有节点有且只有一个前件和一个后件

    线性表的顺序存储结构

    通常,线性表可以采用顺序存储和链式存储两种存储结构

    顺序存储是存储线性表最简单的结构,具体做法是将线性表中的元素一个接一个地存储在一片相邻的存储区域中。这种顺序存储的线性表也被称为顺序表

    顺序表具有一下两个基本特征:

    • 线性表中所有元素所占的存储空间是连续的
    • 线性表中各数据元素在存储空间中是按逻辑顺序依次存放的

    在顺序表中,前件和后件两个元素在存储空间中是紧邻的,且前件元素一定存储在后件元素的前面

    顺序存储结构的插入和删除

    主要思路:

    插入

    • 判断插入元素位置是否合理
    • 在最后一个元素开始遍历,分别将元素往后移一位
    • 修改指定位置的元素
      在这里插入图片描述

    删除

    • 判断删除元素位置是否合理
    • 在末尾开始遍历,分别向前移动一个位置
    • 删除指定位置的元素

    代码实现

    #include <stdio.h>
    #include <stdlib.h> //malloc()
    #include <iso646.h> // or
    #include <stdbool.h> // true false
    #define MAXSIZE 10
    
    typedef int ElemType;
    
    
    // 定义线性表
    typedef struct 
    {
        /* data */
        ElemType *elem;
        int len;
    }SqList;
    
    // 初始化线性表
    bool IniSqList(SqList *l)
    {
        l->len=0;
        l->elem=(ElemType*)malloc(sizeof(ElemType)*MAXSIZE);
        if(l->elem==NULL)
            return false;
        return true;
    }
    
    
    // 输出线性表内容
    void ShowSqList(SqList *l)
    {
        for(int i=0;i<l->len;i++)
            printf("%d ",l->elem[i]);
    }
    
    // 获取某个元素
    int GetData(SqList *l,int index)
    {
        if(index<0 or index>l->len)
            return false;
        return l->elem[index];
    }
    
    // 插入数据
    bool InsertData(SqList *l,int index,ElemType a)
    {
        if(l->len==MAXSIZE)  // 判断表是否满
            return false;
        if(index<1 or index >l->len+1) // 判断表插入位置是否合理
            return false;
        
        if(index<=l->len)
        {
            for(int i=l->len;i>=index;i--)
            {
                l->elem[i]=l->elem[i-1];
            }
            l->len++; // 长度+1
            l->elem[index-1]=a; // 插入新元素
        }
        return true;
    }
    
    // 删除指定数据
    bool DeleteData(SqList *l,int index)
    {
        if(index<0 or index>l->len) // 判断表删除位置是否合理
            return false;
        for(int i=index-1;i<l->len-1;i++)
        {
            l->elem[i]=l->elem[i+1];
        }
        l->elem[l->len-1]=NULL; // 删除末尾元素
        l->len--;   // 长度-1
    }
    
    // 加载数据
    void LoadSqList(SqList *l,int index)
    {
        for(int i=0;i<index;i++)
        {
            l->elem[i]=i+1;
            l->len++;
        }
    }
    
    int main(void)
    {
        SqList list;
        IniSqList(&list);
        LoadSqList(&list,7);
        ShowSqList(&list);
        printf("\n");
        // InsertData(&list,1,9);
        DeleteData(&list,1);
        ShowSqList(&list);
    
        getchar();
        return 0;
    }
    

    实现效果

    在这里插入图片描述

    展开全文
  • 二叉树的存储结构有两种,分别为顺序存储和链式存储

    二叉树的存储结构

    二叉树的存储结构有两种,分别为顺序存储和链式存储,此篇文章介绍顺序存储

    二叉树的顺序存储

    二叉树的顺序存储,指的是使用顺序表(数组)存储二叉树

    重点!!!

    顺序存储只适用于完全二叉树(包括满二叉树),因此,如果我们想顺序存储普通二叉树,需要提前将普通二叉树转化为完全二叉树

    满二叉树的限制条件比完全二叉树更严苛,也就是说如果此树是满二叉树,那么它一定也是完全二叉树

    普通二叉树转完全二叉树的方法

    给二叉树额外添加一些节点,将其拼凑成完全二叉树

    图 1 普通二叉树的转化

    如上图 1,左侧是普通二叉树,右侧是转化后的完全(满)二叉树

    解决转换问题后得解决存储问题

    完全二叉树的顺序存储,仅需从根节点开始,按照层次依次将树中节点存储到数组

    图 2 完全二叉树示意图

     如上图 2 的完全二叉树,其存储状态如下图 3:

    图 3 完全二叉树存储状态示意图

    同样,存储由普通二叉树转化来的完全二叉树,其存储状态如下图 4:

    图 4 普通二叉树存储状态示意图

     实现存储过程后需要考虑还原问题

    完全二叉树具有此性质,将树中节点按照层次并从左到右依次标号,若节点 i 有左右孩子,则其左孩子节点为 2\cdot i,右孩子节点为 2\cdot i+1,此性质可用于还原数组中存储的完全二叉树

    但是实现此部分代码,需要对二叉树进行层次遍历!!!

    我将在后面的文章中补充!!!

    展开全文
  • 计算机,数据元素并不是孤立、杂乱无序的,而是具有内在联系的数据集合。数据元素之间存在一种或多种特定关系,也就是数据的组织形式。为编写出一个 好"的程序,必须分析待处理对象的特性及各处理对象之间存在的...
  • 顺序存储结构小结

    千次阅读 2020-09-13 21:05:48
    线性结构中,数据元素的前后关系是“一对一”的。即线性关系。 1.1 、典型线性数据结构 线性结构是最简单且最常用的一类数据结构,典型的有栈,队列 和线性表。线性结构的存储表示主要有两种:顺序存储和链式存储...
  • 代码如下: void subString(char s[],int start,long count,char t[]) { long i,j,length=strlen(s); if(start<1 || start>length) { printf("The copy position is wrong!... }else if(start+count-1>...
  • 二叉树的顺序存储是指用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉树上的节点元素,即将完全二叉树上的编号为i的结点元素存储一维数组下摆为i-1的分量。 依据二叉树的性质,完全二叉树和满...
  • 线性表的顺序存储结构详解

    千次阅读 2020-09-27 16:25:34
    因为线性表的数据元素的类型相同,一维数组本来就是用来存储一组具有相同数据类型的元素的,因此线性表的顺序存储结构就利用一维数组实现!!! 3.描述顺序存储结构 #define MAXSIZE 50 //定义存储空间的初始分配...
  • 线性表之顺序存储结构和链式存储结构

    万次阅读 多人点赞 2018-09-28 14:17:06
    顺序存储结构和链式存储结构有所不同,具体区别如下表所示: 通过上面的对比,可以得出一些经验性的结论: 若线性表需要频繁查找,很少进行插入和删除操作时,宜采用顺序存储结构。若需要频繁插入和删除时,宜...
  • 2. 掌握栈的顺序存储结构和链式存储结构的实现;3. 熟悉队列的特点(先进先出)及队列的抽象类定义;4. 掌握栈的顺序存储结构和链式存储结构的实现;二、实验要求1. 复习课本有关栈和队列的知识;2. 用C++...
  • 顺序存储结构

    万次阅读 2018-02-01 18:41:59
    2. 顺序存储结构 答:线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。     3. 顺序存储结构需要三个属性: ■ 存储空间的起始位置:数组data,它的存储位置就是存储空间...
  • 栈的顺序存储结构(顺序栈)

    千次阅读 2021-07-27 10:52:22
    栈的顺序存储结构 1.顺序栈的存储结构 #define MAXSIZE 100 //顺序栈存储空间的初始分配 ...数组为顺序存储结构(存储/物理结构:逻辑结构计算机的存储形式) 具体关系见本人关于数据结构第一章图
  • 线性表的顺序存储结构及实现

    千次阅读 2020-11-21 01:21:21
    线性表的顺序存储结构定义 线性表的介绍 线性表的顺序存储称为顺序表(sequential list),其基本思zhunc想是用一段地址连续存储单元的存循单元依次存储线性表的数据元素,则第,如图1所示。设顺序表的每个元素占用c...
  • printf("****************二叉树的顺序存储结构练习******************\n"); printf("1:初始化二叉树\n"); printf("2:销毁二叉树\n"); printf("3:创建二叉树\n"); printf("4:清空二叉树\n"); printf("5:...
  • 顺序存储结构和链式存储结构的优缺点比较

    万次阅读 多人点赞 2018-10-09 17:45:34
    顺序存储结构和链式存储结构的比较 优缺点 顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一);要求内存可用存储单元的地址必须是连续的。 优点:存储密度大(=1),存储空间利用率高。 缺点:...
  • 线性表的顺序存储结构(C语言实现)

    千次阅读 多人点赞 2019-09-02 17:09:44
    线性表的顺序存储结构:用一段地址连续的存储单元依次存储线性表的数据元素 #include "stdio.h" #define MAXSIZE 20 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Statu...
  • 一:线性表的顺序存储结构 1.定义 2.顺序存储示意图如下所示: 3.编号地址 4.存储位置公式 5.存取操作时间性能 6.随机存储结构 7.时间复杂度 (1)对于存取操作 (2)对于插入和删除操作 8. 使用场景 二...
  • 二叉树顺序存储结构一般仅适合于存储完全二叉树 */ #include<stdio.h> #include<stdlib.h> #include<math.h> #include<stdbool.h> #define MaxSize 100 typedef char DataType; typedef...
  • 数据:是描述客观事物的符号,是计算机可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。 包含有整型、实型等数值类型;字符类型(声音、图像、视频等都可以通过编码手段变成字符类型)   数据...
  • 2、链式存储适用于较频繁地插入、删除、更新元素是,而顺序存储结构适用于频繁查询时使用 顺序比链式节约空间,是因为链式结构每一个节点都有一个指针存储域。 顺序支持随机存取,方便操作。 链式的要比顺序的...
  • 顺序存储结构的优点和缺点

    万次阅读 2020-07-22 20:09:09
    顺序存储结构的优点和缺点 优点: 1.无需为表示结点间的逻辑关系而增加额外的存储空间; 2.可方便地随机存取表的任一元素。 缺点: 1.插入或删除运算不方便,除表尾的位置外,表的其它位置上进行插入或...
  • 顺序存储结构(java实现) 数据结构

    千次阅读 2018-03-11 21:41:10
    java里面,我们使用一维数组来实现顺序存储结构,用下标来充当指针.线性表的顺序存储的结构中,我们需要三个属性来描述: 数组data(有存储控件的起始位置) 线性表的最大存储容量(开辟空间的大小,就是数组的长度) ...
  • 采用顺序存储结构的线性表通常称为顺序表。顺序表是将表的结点依次存放计算机内存一组地址连续的存储单元。 2.   顺序表的定义  按逻辑位序计算长度;(逻辑位序和物理位序相差1) typedef struct{ int data...
  • 文章目录前言一、顺序存储结构1:建立一个包含数组的结构体2:获得元素(从数组获取所需元素)3:插入元素4:删除元素二、链式存储结构(方法1)1.创建承载数据的载体2:创建链表2.显示链表数据3:删除链表数据4:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 864,844
精华内容 345,937
关键字:

在顺序存储结构中