精华内容
下载资源
问答
  • 链式存储顺序存储的区别 数据的存储方式一般有两种(这里我们说的存储是指存在内存中):链式存储顺序存储。接下来解析两者的区别 顺序存储 顺序存储是指在内存中开辟连续的存储空间来存放数据,比较有代表性的...

    链式存储于顺序存储的区别

    数据的存储方式一般有两种(这里我们说的存储是指存在内存中):链式存储和顺序存储。接下来解析两者的区别

    顺序存储

    顺序存储是指在内存中开辟连续的存储空间来存放数据,比较有代表性的就是数组以及ArrayList集合这种结构的存储方式都是使用的顺序存储来存储元素对象的;而ArrayList的底层也是通过数组来存储数据元素的,所以我们可以通过数组来观察顺序存储的优缺点。

    优点:查询、遍历效率高

    缺点:增删改效率低

    链式存储

    链式存储的存储空间不是连续的,它是通过指针来指向下一个元素或者上一个元素的地址来定位到该元素的,链式存储的由数据域(data域)与指针域(也叫做地址域,单向链表只有尾指针,双向链表有头指针和尾指针)两部分构成,通过指针指向下一元素,将所有的元素穿插起来,从而形成了一个链表。

    优点:增删改效率高

    缺点:查询、遍历效率低

    顺序存储和链式存储为什么会形成这样的区别

    顺序存储方面:

    我们都知道数组中的元素都有一个下标,每个元素可以通过下标来寻找,因此我们就可以通过这种模式快速的对数组进行遍历与查询。但是我们在进行增删改操作时,其余元素的下标都会因为这些操作而发生改变,比如数组A中有10个元素,我删除了下标为 5 的这个元素,那么下标为 5 这个元素之后的所有元素都会 -1(向前移动),那么我就要执行5次同样的移动操作,如果数据量更大,则耗时更长,这就很不划算了。

    链式存储方面:

    链式存储中没有下标,只有指针,通过指针指向的地址来寻找上一个元素或者下一个元素,而且每次查询都必须从头节点开始遍历,依次寻找,导致查询速度效率低下;但是由于链式存储是通过指针来形成链表的,所以在进行增删改时,只需要修改元素的指针,而不会像数组那样对一个元素进行操作,会影响其他很多元素,因此,效率得到了很大的提升。如:链表B中保存了元素B,B元素的下一个元素是C元素,C元素的下一个元素是D元素,B元素通过尾指针指向了C元素的地址,如果我们需要删除C元素,只需要将B元素的尾指针指向D元素即可,而其他元素并不会受到任何影响。

    展开全文
  • 队列的链式存储与顺序存储

    千次阅读 2014-06-11 18:03:59
    队列也有两种结构:顺序存储链式存储 一:队列的链式存储结构


    队列是一种先进先出的线性表,队列也有两种结构:顺序存储和链式存储


    一:队列的链式存储结构

    为了实现链式存储,就要设置结点信息——元素和指向下一个结点的指针。为了实现队列的先进先出(FIFO)的功能,就要有两个指针指向开始和结尾,才能方便的进行插入和删除。但是如何表示队列为空呢?当然可以让指向头和指向尾的指针指向NULL,不过可以像链表那样设置头结点,就更容易表示了。图示如下:


    1:队列的结点信息表示:

    typedef struct QNode{
        ElemType data;
        struct QNode *next;
    }QNode,*QueuePtr;
    
    typedef struct{
        QueuePtr front; //头指针
        QueuePtr rear;  //尾指针
    }linkqueue;

    2:初始化结点信息

    //初始化头尾指针结点信息,以及头结点信息
    Status queue_init(linkqueue *Q)
    {
        Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode));
        if(!(Q->front))
            exit(-1);
        Q->front->next = NULL;  //初始化头结点信息
        return 1;
    }
    注意:初始化头尾指针结点信息,以及头结点信息


    3:插入结点(注意看评注信息)

    //创建结点并插入到队列中,注意要照顾到所有的指针信息!
    Status enqueue(linkqueue *Q,ElemType e)
    {
        QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
        if(!p)
            exit(-1);
        p->data = e;
        p->NULL;
        Q->rear->next = p;
        Q->rear = p;
        return 1;
    }
    4:删除结点

    Status dequeue(linkqueue *Q,ElemType *e)
    {
        if(Q->front == Q->rear)
            return 0;
        QueuePtr p = Q->front->next;
        *e = p->data;
        Q->front->next = p->next;
        if(Q->front == Q->rear)     //必须考虑到删除最后一个结点的时候,要调整尾指针的信息!
            Q->rear = Q->front;
        free(p);
        return 1;
    }
    注意处理尾指针情况!


    二:队列的顺序存储结构

    1:顺序存储有如下特点

    (1)由于顺序存储,通常通过数组来实现,这是就应该设置QUEUEININTSIZE和QUEUEINCREMENT。

    (2)但是,我们为了有效利用空间,不能让空间无限增大,就应该采用循环队列的模式:元素在数组为放不下时从数组头开始放置。因此只能设置一个初始化空间大小QUEUEININTSIZE,不再附设增量。

    (3)这里类似栈的顺序存储,front指针指向要出队的元素,rear指向最后一个元素的下一个位置。

    (4)貌似要设置两个结构,一个是数组信息,一个是头尾指针信息。但这里可以将两个组合到一起,同时头尾指针弱化为数组的“索引坐标”。

    (5)当rear == front时,表示为空,当(rear+1)%QUEUEINITSIZE == front时,表示队列已满。一方面要注意对数组长度去模,另一方面空出一个位置不放元素,以判定队列满的状态。

    (6)当rear和front增加1变动的时候,都要通过rear=(rear+1)%QUEUEINITSIZE方式来赋值。

    2:顺序存储的示意图


    3:队列的存储结构表示

    #define MAXQSIZE 100
    typedef struct{
        ElemType *base;
        int front;
        int rear;
    }SqQueue;

    4:队列初始化

    Status queue_init(SqQueue *Q)
    {
        Q->base = (ElemType *)malloc(MAXQSIZE * sizeof(ElemType));
        if(!Q->base)
            exit(-1);
        Q->front = Q->rear = 0;
        return 1;
    }

    5:插入元素

    Status enqueue(SqQueue *Q,ElemType e)
    {
        if((Q->rear + 1)%MAXQSIZE == Q->front)
            return 0;
        Q->base[Q->rear] = e;
        Q->rear = (Q->rear + 1)%MAXQSIZE;
        return 1;
    }

    6:删除元素

    Status dequeue(SqQueue *Q,ElemType *e)
    {
        if(Q->front == Q->rear)
            return 0;
        *e = Q->base[Q->front];
        Q->front = (Q->front + 1)%MAXQSIZE;
        return 1;
    }

    7:返回元素个数

    int queuelength(SqQueue Q)
    {
        return (Q->rear - Q->front + MAXQSIZE)%MAXQSIZE;
    }


    展开全文
  • 顺序存储与链式存储对比

    顺序存储与链式存储对比 在这里插入图片描述

    展开全文
  • 数据结构线性表操作的一个实验: 实验要求 顺序和链式存储的线性表的创建、获取元素、插入和删除元素等基本操作的实现。 题目要求: 输入:一组整型数据A,一组...要求:A和B使用两种存储方式:顺序存储链式存储
  • 数据结构中的物理结构包含有:顺序存储结构与链式存储结构 存储优缺点: 顺序存储结构在未达到内存限制时,(因为是顺序存储所以查询尾部比较快)在末尾插入比较快,但是在中间插入,需要将当前插入位置的元素及...

    数据结构中的物理结构包含有:顺序存储结构与链式存储结构


    存储优缺点:

    1.  顺序存储结构在未达到内存限制时,(因为是顺序存储所以查询尾部比较快)在末尾插入比较快,但是在中间插入,需要将当前插入位置的元素及后面元素统一往后移动一位;删除非尾端元素时,需要将当前删除元素后面的所有元素往前移动一个。
    2. 链式存储结构不需要考虑内存限制,插入与删除速度很快,因为链式结构是前后索引方式(即元素会存放它的前一个元素和下一个元素的坐标),查询比较慢,链式结构只能通过从前往后遍历的方式去查询。

    用法1:

    1. 查询频繁
    2. 存储量固定

    建议使用顺序结构:因为已知存储量固定大小,可以直接去内存中开辟一个固定大小的空间。

    用法2:

    1. 插入与删除频繁
    2. 存储量不固定

    建议使用链式存储结构:因为不清楚存储量,而链式结构在内存中,并非连续且相邻的,插入与删除链式结构效率要远远大于顺序结构

     

     

    展开全文
  • 可见不管是顺序存储还是链式存储,原理都是相同的。
  • 顺序存储与链式存储

    2014-11-08 17:14:34
    链式的要比顺序的方便(这句话是不能这么说的,因为插入的话顺序表也很方便,问题是顺序表的插入要执行更大的空间复杂度,包括一个从表头索引以及索引后的元素后移,而链表是索引后,插入就完成了)
  • 这里给出线性表的顺序存储链式存储 链式存储的主要优点是便于数据修改,相对于顺序存储来说,主要缺点是存储空间的利用效率较低, 因为分配给元素的存储单位有一部分用来存储相邻结点的存储地址,由于链式存储...
  • 这篇文章主要介绍顺序存储与链式存储的差异,主要是从两个大的维度和几个小的方面进行比较。 一,从空间性能角度 (1)由下表可以看出顺序存储的存储密度是1(100%)。什么意思呢?就是开辟一段连续的空间,用来存...
  • 顺序存储结构与链式存储结构优缺点顺序结构优点缺点链式结构优点缺点适用场景顺序链式 顺序结构 优点 访问方便、内存利用率高 缺点 内存分配不够灵活、插入删除不方便 链式结构 优点 内存分配灵活、插入删除方便 ...
  • 顺序存储结构与链式存储结构的优缺点 1、###顺序存储结构 概念官方一点来说可以使用百度百科的介绍:顺序存储结构是存储结构类型中的一种,该结构是把逻辑上相邻的结点存储在物理位置上相邻的存储单元中,结点之间的...
  • 栈的顺序与链式存储结构操作,已ac过,放心下载
  • 文章目录线性表定义线性表的抽象数据类型(Abstract Data Type)线性表的顺序存储结构线性表的链式存储结构单链表(single linked list)静态链表...)双向链表(double linked list)链式存储结构与顺序存储结构的比较...
  • 顺序存储结构:一个接一个的,数据无变化。 链式存储结构:一个接一个的,当数据有有变化时,就要用链式存储了。利用生活的例子就是,排队,一个接着一个,当有人排队走了,在想排队只能从最后开始排队。 ...
  • 队列的顺序存储实现 #define MaxSize<储存数据元素的最大个数> typedef struct QNode *Queue; struct QNode{ ElementType Data[MaxSize]; int rear;//队尾 ,进行插入操作 int front;//队头 ,front 进行...
  • 队列的顺序与链式存储结构,已在acm通过
  • 线性表顺序与链式存储的对比分析 by 熊猫烧香 目录 01 顺序与链式存储的结构对比 一顺序存储 在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素,称作线性表的顺序存储结构. 二链式存储 在计算机中用...
  • 实验二 栈 一、实验目的 1.深入了解栈的定义和...1. 栈的基本操作的实现(初始化、赋值、取值、插入、删除等),要求分别采用顺序链式存储结构。 顺序栈源程序 #include<stdio.h> #include <process.h...
  • 二叉树顺序存储转化为链式存储 二叉树的存储可用顺序存储方式和链式存储方式,其中顺序存储时存储地址相邻,空间利用率高,但不易进行元素的增删等操作。而链式存储方式的元素可随意存放,但其存储空间所占为数据...
  • 软考--顺序存储与链式存储的比较

    热门讨论 2016-09-10 11:42:47
    其中重点内容为顺序存储与链式存储。 **相关内容解释:** **顺序存储:**常用于线性数据结构,将逻辑上相邻的数据元素存储在物理上相邻的存储单元里。 **链式存储:**每个节点都由两部分组成:数据域(存放...
  • 前端几篇分别介绍了线性表中顺序存储与链式存储,下面来总结一下他们的区别。 顺序表与链表的优缺点: 1. 单链表的每个结点包括数据域与指针域,指针域需要占用额外空间。 2. 从整体考虑,顺序表要预分配存储空间...
  • 栈的顺序存储#include #include using namespace std; #define MaxSize 100 #define ElementType int typedef struct SNode *Stack; struct SNode{ ElementType data[MaxSize]; int top; }; //建
  • 栈的顺序存储实现 #define MaxSize // 储存数据元素的最大个数 typedef struct SNode *Stack; struct SNode{ ElementType Data[MaxSize]; int Top; }; void Push(Stack PtrS,ElementType item){ //入栈 if(PtrS...
  • 线性表的顺序存储#include #include #include using namespace std; #define MaxSize 100 #define ElementType int typedef struct LNode *List; struct LNode{ ElementType data[MaxSize];
  • 顺序存储: #include #include using namespace std; const int MAXSIZE=105; typedef struct Queue { int data[MAXSIZE]; int front,rear; }SqQueue; int Push(SqQueue *Q,int e) { if((Q->rear+1)%MAXS

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,558
精华内容 1,023
关键字:

链式存储与顺序存储