【数据结构】线性表的顺序存储结构

2023-11-13

 

        线性表n(n≧0)个数据元素(结点)a1,a2, …an组成的有限序列。其中数据元素的个数n定义为表的长度。当n=0时称为空表,常常将非空的线性表(n>0)记作:

        (a1,a2,…an)        

     这里的数据元素ai(1≦i≦n)只是一个抽象的符号,其具体含义在不同的情况下可以不同。

         把线性表的结点按逻辑顺序依次存放在一组地址连续的存储单元里。用这种方法存储的线性表简称顺序表。顺序表的特点是,表中逻辑上相邻的数据元素,存储时在物理位置上也一定相邻。换句话说,顺序表以数据元素在计算机内物理位置相邻来表示线性表中数据元素之间在逻辑关系上相邻

    假设线性表的每个元素需占用m个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置作为参考点。则线性表中第i+1个数据元素的存储位置Loc(ai+1)和第i个数据元素的存储位置Loc(ai)之间满足下列关系:

        Loc(ai+1)=Loc(ai)+m 

 

          顺序表的特点是:逻辑关系上相邻的两个数据元素在物理位置上也相邻。顺序表的优点是:

  1)节省存储空间。由于结点之间的相邻逻辑关系可以用物理位置上的相邻关系表示,因此不需增加额外的存储空间来表示此关系(如链表则需利用指针来表示逻辑相邻关系)。

2)随机存取。

    顺序表的缺点是:插入和删除操作需移动大量数据元素。

以下为代码实现部分,以及测验:

#include<iostream>
#define MaxSize 100
#define LISTINSERTMENT 10

typedef int ElemType;
using namespace std;
class SqList_d
{
private:
    ElemType * elem;
    //ElemType elem_array[MaxSize];//第一种定义;
    int length;
    int ListSize;
public:
    /*线性表的操作:*/
    SqList_d(int n);//构造函数,初始化;
    ~SqList_d();//析构函数,销毁;
    void SqListInsert(int i,int e);
    int  SqListDelete(int i);
    int SqListLocateElem(int e);//返回数据元素的数值i(按值查找)
    int SqListGetElem(int i);//返回第i个数据元素的值(按位查找);
    void printlist();//打印数组;
    void SqListAdd();// 增加数组
    int getLength();// 获得长度;
};
SqList_d::SqList_d(int n)
{//构造长度为0,容量为n的。。
    elem = new int [n];
    length =0;
    ListSize=n;
}
SqList_d::~SqList_d()
{//释放表空间;
    delete [] elem;
    length=0;
    ListSize=0;
}
void SqList_d::SqListInsert(int i,int e)
{//将e插入第i个位置
 if(i<1||i>length)
 {
     cout<<"插入位置异常"<<endl;
     return;
 }
 if(length>=MaxSize)
 {
     int *elem1=new int [ListSize+LISTINSERTMENT];
     for(int i=0;i<length;i++)
     {
         elem1[i]=elem[i];
     }
     delete elem;
     elem=elem1;
     ListSize+=LISTINSERTMENT;
 }
     int *p = &elem[i-1],*q=&elem[length-1];
     for(;q >= p;q--)
     {
         *(q+1)=*q;
     }
     *p=e;
     length++;
 }

int SqList_d::SqListDelete(int i)
{//删除第i个数
    int e;
    if(length==0)
    {
        cout<<"下溢"<<endl;
        return -1;
    }
    if(i<0||i>length)
    {
        cout<<"删除位置异常"<<endl;
        return -1;
    }
    e=elem[i-1];
    int *p=&elem[i-1],*q=&elem[length-1];
    for(;p<q;p++)
    {
        *(p-1)=*p;
    }
    length--;
}
int SqList_d::SqListLocateElem(int e)
{//返回e的位置
    for(int i=0;i<length;i++)
    {
        if(elem[i]==e)
            return i+1;
    }
    return 0;
}
int SqList_d::SqListGetElem(int i)
{//获得第i个位置的数
    if(i<1||i>length)
    {
        cout<<"位置不合法"<<endl;
        return -1;
    }
    return elem[i-1];
}
void SqList_d::printlist()
{
    if(length == 0){
        cout<<" nothing "<<endl;
    }
    else
    {
        for(int i = 0;i < length;i++)
        {
            cout<<elem[i]<<" " ;
        }cout<<endl;
    }}
int SqList_d::getLength()
{
    return length;
}
void SqList_d::SqListAdd()
{
    int e;
    cout<<"please input the "<<length <<"th number:";
    cin >> e ;
    elem[length] = e;
    length++;
}
int main()
{
    SqList_d lista(5);
    lista.printlist();
    cout<<"length: "<<lista.getLength()<<endl;
    lista.SqListAdd();
    lista.SqListAdd();
    cout<<"length: "<<lista.getLength()<<endl;
    lista.SqListInsert(1,3);
    lista.SqListInsert(1,4);
    lista.SqListInsert(2,5);
    lista.SqListInsert(3,6);
    lista.printlist();
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数据结构】线性表的顺序存储结构 的相关文章

随机推荐

  • 微信小程序底层框架实现原理

    小册介绍 小程序 Mini Program 我们都很熟悉 它是一种不用下载安装就能使用的应用 它实现了应用 触手可及 的梦想 如今 微信已经把小程序打造成了新的开发者生态 而小程序也是这么多年来 中国IT行业里为数不多的能够真正影响到普通程
  • Docker进阶 - 9. docker network 之自定义网络

    1 运行两个tomcat实例 并进入容器内部 docker run d p 8081 8080 name tomcat81 billygoo tomcat8 jdk8 docker exec it tomcat81 bash docker
  • docker基本命令记录

    Docker 是一个开源的容器技术 它允许开发人员将应用程序及其所有依赖项打包到一个容器中 然后轻松地在任何地方部署和运行 以下是 Docker 的一些基本操作 基础操作 启动 Docker service docker start 停止
  • visual studio 2019恢复默认设置

    系列文章目录 文章目录 系列文章目录 前言 一 解决方法 二 详细步骤 1 首先 打开microsoft visual studio 2017 选择 工具 2 在工具菜单中选择 Visual Studio 命令提示 3 这时会弹出一个命令提
  • 第四课:创建VxWorks系统镜像

    目录 2 2 2 创建VxWorks系统镜像 2 2 2 1 VxWorks概述 2 2 2 2 创建VxWorks6 9工程 zynq7000 2 2 2 3 创建VxWorks6 9工程 P2020
  • Leetcode(236,112) :有关树的一些操作(递归、动态、遍历,搜索)

    236 Lowest Common Ancestor of a Binary Tree 查找二叉树的两个节点的最小公共祖先 下面分为两种情况来考虑这个问题 第一种是BST 二叉搜索树 BST 利用二叉搜索树的性质 左子树和右子树的节点大小关
  • Unity鼠标样式发布后不正常

    环境 Unity5 4 2f2 Texture2D img Texture2D Resources Load Textures img Cursor SetCursor Texture2D img Vector2 zero CursorMo
  • git:git diff old mode 100644 new mode 100755含义及解决方式

    参考 git diff old mode 100644 new mode 100755含义及解决方式 解决办法 git config add core filemode false 忽略就完事了
  • Python中编写与引入自己的包、模块

    其他关于Python的总结文章请访问 https blog csdn net qq 38962621 category 10299380 html 编写与引入自己的包 模块 模块 module Python中的任何 py 文件都可以称为一个
  • Spring4.0+Hibernate4.2.整合出现java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition

    1 异常 Exception in thread main org springframework beans factory BeanCreationException Error creating bean with name news
  • Air103

    目录 一 在线云编译 二 本地编译 Windows平台用户 如果是Air103 本机为 Air103 如果是Air105 本机为 Air105 定制固件里的库 编译 执行 生成过程及log文件解析 1 生成elf格式 2 按照设置文件设定的
  • python数据分析与可视化——第五章实训

    1 导入模块 import pandas as pd import numpy as np 2 获取数据 fdata pd read excel F 专业课程作业 python时空数据分析与可视化 tips mod xls fdata he
  • 安卓APP_ 布局(6) —— ConstrainLayout约束布局(重要)

    摘自 安卓APP 布局 6 ConstrainLayout约束布局 重要 作者 丶PURSUING 发布时间 2021 04 12 10 49 42 网址 https blog csdn net weixin 44742824 articl
  • B站粉丝数显示器代码解析学习

    代码来源B站 会飞的阿卡林https www bilibili com video BV14W41167tY 学习使用ESP8266的WIFI无线连接 在这里可以了解到SPI协议在Arduino中的使用 后来也使用ESP8266做了其他项目
  • 交换机与路由器技术-36-端口镜像

    目录 一 端口镜像 1 1 概述 1 2 目的 1 3 功能 1 4 端口镜像应用场景 1 4 1 本地端口镜像 SPAN 1 4 2 远程端口镜像 RSPAN 1 5 配置本地端口 1 6 配置远程端口镜像 RSPAN 一 端口镜像 1
  • Rabbitmq和kafka有什么区别?

    RabbitMQ和Kafka都是流行的消息队列系统 它们都可以用于构建分布式系统中的消息传递机制 虽然它们都可以用于相似的场景 但它们之间仍然存在一些重要的区别 一 数据处理方式不同 RabbitMQ是一个传统的AMQP消息队列 它使用队列
  • Java语言实现通讯录,联系人信息存在数据库里

    通讯录管理 问题描述 编写一个简单的通讯录管理程序 通讯录中需要存储姓名 地址 电话号码 邮政编码四项 还可以存储Email 家庭电话等信息 基本要求 程序应提供的基本管理功能有 1 添加 即增加一个人的记录到通信录中 2 显示 即在屏幕上
  • postman 将返回值设置为环境变量

    代码如下 var jsonData JSON parse responseBody pm globals set token jsonData data token
  • win2012 管理用户账号点滴

    1 c windows system32 config SAM 存储本地用户账号 2 cmd gt set 可以查看很多信息 包括logon server 3 创建一般服务账号的时候 要选择 密码永不过期 4 cmd gt net user
  • 【数据结构】线性表的顺序存储结构

    线性表 由n n 0 个数据元素 结点 a1 a2 an组成的有限序列 其中数据元素的个数n定义为表的长度 当n 0时称为空表 常常将非空的线性表 n gt 0 记作 a1 a2 an 这里的数据元素ai 1 i n 只是一个抽象的符号 其