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

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


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

相关文章
|
4天前
|
存储 C语言
数据结构中的线性表链式存储介绍及其基本操作
链式存储是线性表的一种重要存储方式,它通过节点和指针的结构,实现了灵活的动态存储管理。本文介绍了单向链表的基本操作,并提供了相应的C语言代码示例。理解和掌握链表的操作对学习和应用数据结构具有重要意义。希望这篇博客能帮助你更好地理解线性表的链式存储。
14 2
|
9天前
|
存储 缓存 算法
数据结构和算法学习记录——总结顺序表和链表(双向带头循环链表)的优缺点、CPU高速缓存命中率
数据结构和算法学习记录——总结顺序表和链表(双向带头循环链表)的优缺点、CPU高速缓存命中率
11 0
|
1天前
|
存储 机器学习/深度学习 算法
【数据结构与算法】:手搓顺序表(Python篇)
【数据结构与算法】:手搓顺序表(Python篇)
|
1天前
|
存储 算法 C++
【数据结构与算法】:带你手搓顺序表(C/C++篇)
【数据结构与算法】:带你手搓顺序表(C/C++篇)
|
4天前
数据结构初阶 顺序表的补充
数据结构初阶 顺序表的补充
5 0
|
4天前
|
存储
数据结构初阶 顺序表的讲解
数据结构初阶 顺序表的讲解
7 0
|
9天前
|
存储 算法
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
8 0
|
9天前
|
算法 C语言
数据结构和算法学习记录——特殊线性表之栈(下)-销毁栈函数、判断栈是否为空、压栈函数、出栈函数、取栈顶元素、计算栈中有多少个元素、栈有关习题-有效的括号
数据结构和算法学习记录——特殊线性表之栈(下)-销毁栈函数、判断栈是否为空、压栈函数、出栈函数、取栈顶元素、计算栈中有多少个元素、栈有关习题-有效的括号
10 0
|
9天前
|
算法
数据结构和算法学习记录——特殊线性表之栈(上)-栈的概念、栈的结构、链式栈数组栈、栈的结构体定义、栈的基本接口函数、栈顶初始化函数
数据结构和算法学习记录——特殊线性表之栈(上)-栈的概念、栈的结构、链式栈数组栈、栈的结构体定义、栈的基本接口函数、栈顶初始化函数
4 0
|
9天前
|
算法
数据结构和算法学习记录——线性表之双向链表(下)-头插函数、头删函数、查找函数、pos位置之前插入结点、pos位置删除结点及其复用、销毁链表函数
数据结构和算法学习记录——线性表之双向链表(下)-头插函数、头删函数、查找函数、pos位置之前插入结点、pos位置删除结点及其复用、销毁链表函数
9 0