数据结构与算法(一) 线性表之顺序表

简介:  线性表是一种最简单、最常用的数据结构,根据存储方式可以分为顺序表和链表。 顺序表: 顺序表指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存储结构或顺序映像(sequential mapping)。

 线性表是一种最简单、最常用的数据结构,根据存储方式可以分为顺序表链表
顺序表: 顺序表指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存储结构或顺序映像(sequential mapping)。它以“物理位置相邻”来表示线性表中数据元素间的逻辑关系,可随机存取表中任一元素。
链表:链表指的是用一组任意的存储单元存储线性表中的数据元素,称为线性表的链式存储结构。它的存储单元可以是连续的,也可以是不连续的。在表示数据元素之间的逻辑关系时,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置),这两部分信息组成数据元素的存储映像,称为结点(node)。

接下来就是具体实现了(C++)

这里是 SeqList 这个类的成员变量

        //数据集合
        T *Data;
        //当前顺序表中元素数量
        int Length;
        //顺序表容量
        int Size;

首先是构造函数

template<class T>
SeqList<T>::SeqList(T *Data, int Length, int Size)
{
    this->Data = Data;
    this->Size = Size;
    this->Length = Length;
    this->Data = new T[Size+1];
    for(int i=0;i<Length;i++)
        this->Data[i+1] = Data[i];
}

接下来是几个主要的成员方法


插入函数
向指定位置插入一个元素,由于顺序表是顺序存储的,所以需要考虑所给位置是否超过当前顺序表长度,插在末尾即为(length+1),所以未知参数在[1,Length+1]范围内才能进行插入操作。这时,由于顺序表是以数组作为存储结构,还要考虑在插入一个元素之后会不会发生数组越界,即(Length+1<Size)时,才能进行插入,否则要进行扩容,这里每次长度不够时长度增加10,即创建一个新的数组,容量为(Size+10)。

template<class T>
void SeqList<T>::ele_insert(int loca,T data)
{
    if(loca>Length+1 || loca<1)
        throw "out of size";
    if(Length+1>=Size)
    {
        T* p = Data;
        Data = new T[Size+10];
        for(int i=1;i<=Length;i++)
            Data[i] = p[i];
        delete []p;
        p = nullptr;
        Size+=10;
    }
    for(int i=Length+1;i>loca;i--)
        Data[i] = Data[i-1];
    Data[loca] = data;
    Length++;
}

删除函数
删除指定位置的元素。思路就是依次前移将指定位置的元素覆盖掉,直接上代码。

template<class T>
void SeqList<T>::ele_delete(int loca)
{
    if(loca<1 || loca>Length)
        throw"out of size";
    for(int i=loca;i<Length;i++)
        Data[i] = Data[i+1];
    Length--;
}

查询函数
查询顺序表中是否存在某个元素,存在则返回第一次出现位置的下标(下标从1开始),否则返回-1,简单的遍历。

template<class T>
int SeqList<T>::ele_locate(T data)
{
    for(int i=1;i<=Length;i++)
    {
        if(Data[i] == data)
            return i;
    }
    return -1;
}

这里所列出的只是几个常用功能的实现,具体可以根据自己的需求进行扩充,放个源码链接
SeqList.h
SeqList.cpp


下一篇:数据结构与算法(二) 线性表之单链表

相关文章
|
2月前
|
存储 编译器 C语言
数据结构-顺序表详解(看这篇就足够了,哈哈哈)
数据结构-顺序表详解(看这篇就足够了,哈哈哈)
70 2
|
21小时前
|
数据库
数据结构中二叉树,哈希表,顺序表,链表的比较补充
二叉搜索树,哈希表,顺序表,链表的特点的比较
数据结构中二叉树,哈希表,顺序表,链表的比较补充
|
1月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
1月前
|
存储 C语言
【数据结构】顺序表(c语言实现)(附源码)
本文介绍了线性表和顺序表的基本概念及其实现。线性表是一种有限序列,常见的线性表有顺序表、链表、栈、队列等。顺序表是一种基于连续内存地址存储数据的数据结构,其底层逻辑是数组。文章详细讲解了静态顺序表和动态顺序表的区别,并重点介绍了动态顺序表的实现,包括初始化、销毁、打印、增删查改等操作。最后,文章总结了顺序表的时间复杂度和局限性,并预告了后续关于链表的内容。
82 3
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
2月前
|
存储 Java
数据结构第二篇【关于java线性表(顺序表)的基本操作】
数据结构第二篇【关于java线性表(顺序表)的基本操作】
46 6
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之王道第2.3章节之线性表精题汇总二(5)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
IKU达人之数据结构与算法系列学习×单双链表精题详解、数据结构、C++、排序算法、java 、动态规划 你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
|
存储
数据结构(顺序表)
数据结构(顺序表)
31 0
|
2月前
|
存储 算法
【数据结构】新篇章 -- 顺序表
【数据结构】新篇章 -- 顺序表
23 0
|
2月前
|
存储 测试技术
探索数据结构:顺序表的实现与应用
探索数据结构:顺序表的实现与应用