线性表--线性存储

[数据结构] 顺序表的实现(c++/类模板) #include #include using namespace std; const int defaultSize = 100; template class SeqList { private: T* data; int maxSize;//最大空间 int last;//最后一个有效数据所在的位置,last=-1为空表 void Resize(i 阅读详情

基类:

#ifndef LINEARLIST_H
#define LINEARLIST_H

/*
 * FileName: LinearList.h
 *Creater:QianChenglong
 *Date:2011/10/18
 *Comments: 线性表的抽象基类
 */

template<typename T>
class LinearList{
public:
    virtual int getLength() const=0;//求表长;
    virtual  int find(const T& value)const=0;//根据值搜索位序;
    virtual void setData(int i,const T value) =0;//赋值;
    virtual T getData(int i) const=0;//取值;
    virtual bool insert(int i,T& x) =0;//插入;
    virtual bool remove(int i,T& value) =0;//删除;
    virtual bool isEmpty() const=0;//判断表空;
    virtual void output() const=0;//输出;
};

#endif

类定义:

#ifndef SEQLIST_H
#define SEQLIST_H

#include<iostream>
#include<cstdlib>
#include"LinearList.h"

template<typename T>
class SeqList: public LinearList<T>{
private:
    T* data;//存放数组;
    int maxSize;//最大存储个数;
    int length;//当前已存表项数;
    static int initializedCapacity;//初始空间
    void overflowProcess();//空间溢出时的处理
public:
    SeqList();//默认构造函数;
    SeqList(SeqList<T>& L);//复制构造函数;
    ~SeqList();//析构函数
    
    int capacity() const;//返回容量;
    int getLength() const;//返回表长
    int find(const T& x) const;//搜索x在表中的位置,成功返回位序,失败返回0;

    T getData(int i) const;//取序号为i的值(从1开始);
    void setData(int i,const T value);//把逻辑位序为i的值置成value

    void PushBack(T& x);
    bool insert(int i,T& x);//插入:将x插入位序为i的位置,成功返回1,失败返回0;

    bool remove(int i,T& value);//删除位序为i的元素,value返回删除值,成功返回1,失败返回0;

    bool isEmpty() const;//判空
    bool isFull() const;//判满

    void sort();//排序,从小至大;

    
    SeqList<T>& operator=(SeqList<T>& L);//赋值;

    void output() const;
    template<T> friend std::ostream& operator<<(std::ostream& out,SeqList<T>& x);//函数模板作为类模板的友元函数的声明方式;
};

#include"SeqList.cpp"

#endif


类实现:

#ifndef SEQLIST_CPP
#define  SEQLIST_CPP

#include<iostream>
#include<cstdlib>
#include"SeqList.h"
///////////////////////////////////////////////////////////////////
template<typename T>
int SeqList<T>::initializedCapacity=100;//模板的静态数据成员的定义

/////////////////////////////////////////////////////////////////
template<typename T>
std::ostream& operator<<(std::ostream& out,SeqList<T>& x){//重载<<
    int length=x.getLength();
    for(int i=0;i!=length;++i)
        out<<x.getData(i+1)<<' ';
    out<<std::endl;
    return out;
}

/////////////////////////////////////////////////////////////////
template< typename T>
SeqList<T>::SeqList()
    :maxSize(initializedCapacity)
{//默认构造函数
    length=0;
    if(!(data=new T[maxSize])){//分配内存
        std::cerr<<"内存分配失败\n";
        exit(0);
    }
}

///////////////////////////////////////////////////////////////////////
template< typename T>
SeqList<T>::SeqList(SeqList<T>& L)
{
    maxSize=L.Size();
    length=L.Length();
    if(!(data=new T[maxSize]))
    {
        std::cerr<<"存储分配错误!\n";
        exit(1);
    }
    for(int i=0;i!=length;++i)
        data[i]=L.getData(i);
}

////////////////////////////////////////////////////////////////
template< typename T>
int SeqList<T>::find(const T& foundValue) const{//查找值为x的
    int i;
    for(i=0;i!=length;++i){
        if(data[i]==foundValue)
            break;//若找到则退出
    }
    if(data[i]==foundValue)
        return i+1;
    else
        return 0;
}

/////////////////////////////////////////////////////////////////////////////////////
template<typename T>
bool SeqList<T>::insert(int i,T& value){//将value插入到第i个位置,物理位序为i-1
    if(isFull())//若空间已满
        overflowProcess();
    if(i<=0||i>=length+2)//若插入位置不位于[1,length+1],则插入位置不存在;
        return 0;
    for(int n=length-1;n!=i-2;--n)//从后向前,依次后移
        data[n+1]=data[n];
    data[i-1]=value;
    ++length;
    return 1;
}

template<typename T>
bool SeqList<T>::remove(int i,T& value){//删除第i个值,用value返回被删除值,物理位序为i-1
    if(isEmpty())//若表空,则失败
        return 0;
    if(i<=0||i>=length)//若删除位置不存在,则失败
        return 0;
    else{
        value=data[i-1];
        for(int n=i-1;n!=length;++n){//从前向后,依次前移
            data[n]=data[n+1];
        }
        --length;
    }
}

////////////////////////////////////////////////////////////////////////
template<typename T>
SeqList<T>& SeqList<T>::operator=(SeqList<T>& L){//赋值函数
    maxSize=L.capacity();
    length=L.length();
    data=new T[maxSize];
    for(int i=0;i!=length;++i)
        data[i]=L.getData(i);
    return *this;
}

template<typename T>
void SeqList<T>::output() const{//输出表值
    for(int i=0;i!=length;++i)
    std::cout<<data[i]<<' ';
    std::cout<<std::endl;
}

///////////////////////////////////////////////////////////////
template<typename T>
void SeqList<T>::sort(){//按值从小到大排序
    int minSub;
    T term;
    for(int i=0;i!=length;++i)    {
        minSub=i;
        for(int j=i+1;j!=length;++j){
            if(data[minSub]>data[j])
                minSub=j;
        }
        if(minSub!=i){
            term=data[i];data[i]=data[minSub];data[minSub]=term;
        }
    }
}

/////////////////////////////////////////////////////////////////////////
template<typename T>
void SeqList<T>::PushBack(T& value){//将value插到表尾
    if(isFull())
        overflowProcess();
    data[length]=value;
    ++length;
}

////////////////////////////////////////////////////////////////////
template<typename T>
SeqList<T>::~SeqList(){//析构函数
    delete [] data;//删除data所指向的内存
    data=0;//指针置零
}

///////////////////////////////////////////////////////////////////////
template<typename T>
int SeqList<T>::capacity() const{//返回
    return maxSize;
}

//////////////////////////////////////////////////////////////////////
template<typename T>
T SeqList<T>::getData(int i) const{//取逻辑位序为i的元素的值
    return i>0&&i<=length?data[i-1]:NULL;//若失败返回NULL,有点问题
}

///////////////////////////////////////////////////////////////////////
template<typename T>
void SeqList<T>::setData(int i,const T value){
    if(i>0&&i<=length-1)
        data[i-1]=value;
    else
        std::cout<<"插入位置不存在。\n";
}

/////////////////////////////////////////////////////////////
template<typename T>
bool SeqList<T>::isEmpty() const{//判空
    return length==0;
}

///////////////////////////////////////////////////////////
template<typename T>
bool SeqList<T>::isFull() const{//判满
    return length==maxSize;
}

/////////////////////////////////////////////////////////////
template<typename T>
void SeqList<T>::overflowProcess(){//溢出处理
    maxSize+=20;//空间再增加20
    T* newData=new T[maxSize];
    for(int i=0;i!=length;++i)//数据复制到新分配的内存
        newData[i]=data[i];
    delete [] data;//释放原空间
    data=newData;
}

//////////////////////////////////////////////////////////
template<typename T>
int SeqList<T>::getLength() const{//返回表长
    return length;
}
#endif


功能测试:

#include<iostream>
#include"SeqList.h"

int main()
{
    SeqList<int> La;
    for(int i=1;i!=10;++i)
        La.insert(i,i);
    La.output();
    std::cout<<La.capacity()<<std::endl
        <<La.getLength()<<std::endl
        <<La.find(3)<<std::endl;
    int x;
    La.remove(3,x);
    std::cout<<x<<std::endl;
    La.output();

    int elem;
    while(std::cin>>elem)
        La.PushBack(elem);
    La.output();
    La.sort();
    La.output();
    std::cout<<La;
    std::cin.clear();
    return 0;
}


顺序存储的线性表 任务描述 本关任务:实现 step1/Seqlist.cpp 中的SL_InsAt、SL_DelAt和SL_DelValue三个操作函数,以实现线性表中数据的插入、删除与查找等功能。 相关知识 线性表是最基本、最简单、也是最常用的一种数据结构。线性表结构中,数据元素之间通过一对一首尾相接的方式连接起来。具体实现时,线性表可以采用不同的存储策略。下面给出了一种基于顺序存储的线性表实现方案: 该方案将线性表存储在一片连续空间里,并通过data、len和max三个属性元素。组织成为一个结构: data: 给出线 阅读详情

相关推荐

Unity Shader学习笔记/Urp/水墨风效果

Unity Shader学习

qq_63133691的博客 2116

数据结构之线性表(一般的线性表)

接下来就开始正式进入数据结构环节了,我们先从线性表开始。

忆梦九洲的博客 1474

别再只放按钮了!巧用微信小程序‘长按识别’功能,打造无缝加群体验

本文深入探讨了微信小程序'长按识别'功能在社群运营中的创新应用,通过简化加群流程至一步操作,显著提升用户转化率。文章详细解析了技术实现细节、UI/UX设计策略,并对比了与企业微信API的适用场景,为开发者提供打造无缝加群体验的完整解决方案。

weixin_42627853的博客 434

超详细介绍最基本的数据结构线性存储

本文仅仅介绍数据结构中线性存储结构的最基本内容

qq_67404195的博客 1693

基于51单片机的多功能计算器全套设计

当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且人脑比较容易出错。计算器作为一种快速通用的计算工具方便了用户的使用。计算器可谓是我们最亲密的电子伙伴之一。本设计着重在于分析计算器设计开发过程中的环节和步骤,并从实践经验出发对计算器设计做了详细的分析和研究。 本设计是以STC89C52单片机为核心的计算器模拟系统设计,输入采用5×8矩阵键盘,可以进行加、减、乘、除等十几种数字运算,同时支持括号

runweipa的博客 1742

Nangate 45nm FreePDK开源工艺库:从RTL到GDSII全流程实战

在数字IC设计中,标准单元库是连接逻辑综合与物理实现的基石,它定义了每个单元的逻辑功能、时序延迟与物理尺寸。开源EDA工具链的成熟,使得个人也能借助免费工艺套件完整跑通芯片设计流程。Nangate 45nm FreePDK作为一套经典的开源工艺库,凭借结构清晰、配套完善的特性,成为学习数字后端和时序收敛的理想训练场。从综合工具Yosys读取Liberty文件进行逻辑映射,到OpenROAD执行布局布线与时钟树综合,再到使用OpenSTA分析关键路径延迟,这套流程涵盖了数字设计最核心的环节。通过亲手操作,开发

weixin_29168393的博客 270

顺序线性表

#include #include #define OK 1 #define ERROR 1 #define TRUE 1 #define FALSE 1 typedef int Status; typedef int ElemType; #define MAXSIZE 20 /*存储空间初始分配量*/ typedef struct { ElemType data[MAXS

Hao_09的专栏 1340

西门子1500T插补控制实战:从硬件组态到轨迹规划

本文详细解析了西门子1500T插补控制的完整实战流程。从硬件组态中正确选择带T的CPU和配置报文105,到创建同步轴与插补器工艺对象,再到使用MC_Interpolator功能块编程实现直线与圆弧插补,并分享了调试技巧与常见问题解决方案,为工程师实现高精度复杂轨迹规划提供清晰指导。

weixin_29228781的博客 423

线性表的存储结构

线性表线性表的概念线性表的顺序存储结构思路与代码线性表的链式存储结构 线性表的概念 线性表是零个或多个数据元素的有限序列,并且线性表中的元素类型必须相同,线性表在物理存储上可以分为顺序存储结构和链式存储结构。 顺序存储结构:在内存空间中开辟一片连续的空间,然后把数据有序进行存储的一种方式。线性表的顺序存储结构类似于c语言中的数组,但两者的差别在于数组的长度是基本不变的,数组在申请内存空间的时候就已...

qq_45249273的博客 1840

激光SLAM总结——Fast LIO / Fast LIO2 / Faster LIO

激光SLAM总结——Fast LIO / Fast LIO2 / Faster LIO 在之前的工作中有接触过LOAM,最近在工作中又接触到Faster LIO相关的工作,于是想着对Fast LIO / Fast LIO2 / Faster LIO这一系列工作进行一个简单的总结,以加深自己对激光SLAM算法的理解,之前总结过的一些和激光SLAM算法相关的博客还有,感兴趣的同学可以一起学习讨论: 激光SLAM总结——VLOAM / LIMO算法解析 激光SLAM总结——LIO-Mapping / LIOM /

weixin_44580210的博客 1万+

安装keil软件时安装不了芯片包怎么回事?芯片包安装路径放在Keill里的packs下面,弹框提示报错:Errors retumned from cpackget...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2207

线性表的顺序存储结构

线性表的基本概念 线性结构习惯称为线性表,线性表是n(n>=0)个数据元素构成的有限序列,表中除第一个元素外的每一个元素,有且只有一个一个前件;除最后一个元素外,有且只有一个后件。 非空数据表具有: 只有一个根节点,首元素无前件 有且只有一个终端节点,末尾元素无后件 除收尾节点外,其他所有节点有且只有一个前件和一个后件 线性表的顺序存储结构 通常,线性表可以采用顺序存储和链式存储两种存储结构 顺序存储是存储线性表最简单的结构,具体做法是将线性表中的元素一个接一个地存储在一片相邻的存储区域中。这种顺

深耕信创・网络・云原生领域 1万+

互联网人提高效率必备软件合集

很多的时候我们解决不了问题,只是因为没有找到对的工具,实际上,很多好的工具就在那里,只是你不用而已。这点上,信息壁垒是一个很大的原因,因此我希望兄伙伴们多出去走走,不要只是局限在一个圈层;

zhonglunshun的专栏 3484

线性表(线性表的顺序存储)

线性表的顺序存储(第二章) 1.线性表的类型定义 线性表的定义:由零个或多个数据元素组成的有限序列; 强调:①线性表是一个序列,也就是元素之间有先来后到。 ②若元素存在多个,则第一个元素无前驱,而最后一个元素无后继,其他元素都有且只有一个前驱和后继。 ③线性表强调是有限的。 故线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,称为空表 2.抽象数据类型线性表的定义(常用) InitList(&L) 操作结果:构造一个空的线性表L Cle

wangy55的博客 238

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

线性表的顺序存储

在计算机中主要有两种基本的存储结构用于存放线性表:顺序存储结构和链式存储结构。 线性表的顺序存储结构 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素,使得线性表中在逻辑结构上相邻的数据元素存储在连续的物理存储单元中,即通过数据元素物理存储的连续性来反映数据元素之间逻辑上的相邻关系。采用顺序存储结构存储的线性表通常称为顺序表。可将顺序表归纳为:关系线性化,结点顺序存。 ...

mez_Blog的博客 3256

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

线性表概念_线性表的顺序表表示和实现_线性表的顺序存储

线性表基础概念,线性表的顺序表表示和实现 线性表 线性表(linear list)是最基本、最简单、也是最常用的一种数据结构。线性表是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。 特征 线性表是具有相同特征的数据元素的一个有限序列。 线性表(linear list)由n(n>=0)个数据元素(结点)a1,a2,…,an组成的有限序列 线性表中元素的个数n(n...

diviner_s的博客 5097

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数据结构——线性表及线性表顺序存储

首先来说一下什么是线性表。 1、  线性表是一种最基本、最简单的的数据结构,是一种线性结构。 2、  线性表中数据元素之间的关系是一对一,是n个数据元素的有限序列。 3、  若将线性表记为(a1, ……, ai-1, ai,ai+1, ……,an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。当丨=1, 2, ……, n-1时,

Floating Cat 2956

线性表的存储结构详解

线性表的存储 线性表存储结构可细分为顺序存储结构和链式存储结构 顺序存储结构:将数据依次存储在连续的整块物理空间中,这种存储结构称为顺序存储结构(简称顺序表); 链式存储结构:数据分散的存储在物理空间中,通过一根线保存着它们之间的逻辑关系,这种存储结构称为链式存储结构(简称链表); 具体存储方式可根据具体问题的要求和性质来决定。 一般选择存储结构时可以主要从以下两个方面考虑: (1)基于空...

DSVHYU的博客 6414

顺序存储线性表实现

在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素,称作线性表的顺序存储结构。   顺序存储结构的主要优点是节省存储空间,因为分配给数据的存储单元全用存放结点的数据(不考虑c/c++语言中数组需指定大小的情况),结点之间的逻辑关系没有占用额外的存储空间。采用这种方法时,可实现对结点的随机存取,即每一个结点对应一个序号,由该序号可以直接计算出来结点的存储地址。但顺序存储方法的主要缺点...

少说,多做。 4758

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

💯线性表是具有相同类型的数据类型的n个数据元素的有限序列,其中n为表长,n0n=0n0时为空表ege.geg这里要注意的是,定义中描述的为数据元素,而非数据项,也就是,存储单元可以是一个结构体,而数据项为里面的成员✨线性表的特点:表中元素的个数为有限个表中元素具有逻辑上的顺序性,表中元素有其先后顺序表中元素都是数据元素,每一个元素都为单个元素表中元素的数据类型都相同,每个元素占相同的内存空间表中元素具有抽象性,即仅讨论元素之间的逻辑关系,而不考虑具体实现方式🔑。

DAY I 的成长之路 5012

线性表的顺式存储结构

线性表的顺式存储结构的实现 编写完成下列功能的函数:( 1)初始化一个线性表;(2)在已经初始化的基础上,创建一个包含 15 个不大于 100 的正整数值的线性表(15 个值由计算机随机产生);(3)将一个数 x 插在第 i 个元素前(x 和 i 在程序运行时输入);( 4)删除第 i 个元素(i 在程序运行时输入),并在删除结束后输出删除元素的值;(5)查找给定值 x 是否在线性表中(x 在程序...

weixin_45738232的博客 1466

线性表及线性表的顺序存储结构

一、线性表 线性表:零个或多个数据元素的有限序列。 首先它是一个序列,也就是说,元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最以后一个元素无后继,其他每个元素都有且一个前驱和后继。 二、线性表的顺序存储结构 线性表的顺序存储结构,指的是用一段地址连续的 存储单元依次存储线性表的数据元素。 简单说就是在内存中找了一块地方,通过占位的形式,把一定内存空间给占了。 顺序存储结构的三个属性: 存储空间的起始位置 线性表的最大存储空间 线性表当前长度(元素的个数) 三、顺序存储结构的实现

SevenOne 474
上一篇: 嵌套依赖类型名
下一篇: 线性表--链式存储
心若天府
博客等级 码龄15年 37粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值