zoukankan      html  css  js  c++  java
  • 数据结构--线性表顺序存储(顺序表)

    特点:

    线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素。

    作用:

    线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系反映数据元素之间逻辑上的相邻关系

    顺序存储的实现:

    一维数组存储顺序表中的数据

    缺点:

    大小固定,使用前需要分配地址,因此当表长变化较大时,难以确定合适的存储规模插入删除操作复杂性太高。

    优点:

    元素访问的时候O(1)访问。

    实现代码:

    #include<bits/stdc++.h>
    #define MaxSize 10000 //顺序表借助数组实现,然后必须要规定大小才能分配地址。宏定义
    using namespace std;
    template <class T>
    class SeqList
    {
    private:
        T data[MaxSize]; // 存放数据元素的数组
        int length; // 线性表的长度
    public:
        SeqList( )
        {
            length=0;   // 无参构造函数
        }
        SeqList ( T *a, int n ); // 有参构造函数
        int get_Len ( ) {return length;  } // 求线性表的长度
        void print_List ( ) ; // 打印线性表
        void  ins_Loc(int i, T x);// 在线性表中第 i 个位置插入值为 x 的元素
        void  del_Loc(int i);//删除线性表的第 i 个元素
        T get_Loc(int i); // 按位查找,取线性表的第 i 个元素
        T ser_Loc(T x); // 按值查找,求线性表中值为 x 的元素序号
        ~SeqList( ) { } // 析构函数为空,数组是程序结束自动回收内存,无需写析构函数
    };
    template <class T>
    SeqList<T>:: SeqList(T a[], int n)  //带参数构造函数
    {
        if (n>MaxSize)
            throw "超出限制";  //抛出异常情况
        length=n;
        for(int i=0; i<n; i++)
            data[i]=a[i];
    }
    template <class T>
    void SeqList<T>::ins_Loc(int i, T x)
    {
        if (length>=MaxSize)
            throw "超出限制";
        if (i<1 || i>length+1)
            throw "位置非法";
        length++;
        for (int j=length; j>=i; j--)
            data[j]=data[j-1];
        data[i-1]=x;
    }
    template <class T>
    void SeqList<T>::del_Loc(int i)
    {
        if (length==0)
            throw "空表";
        if (i<1 || i>length)
            throw "位置非法";
        for (int j=i; j<length; j++)
            data[j-1]=data[j];
        length--;
        return ;
    }
    template <class T>
    T SeqList<T>::get_Loc(int i)
    {
        if (i<1 && i>length)
            throw "查找位置非法";
        else
            return data[i-1];
    }
    template <class T>
    T SeqList<T>::ser_Loc(T x)
    {
        for (int i=0; i<length; i++)
            if (data[i]==x)
                return i+1 ;  //下标为i的元素等于x,返回其序号i+1
        return 0;  //退出循环,说明查找失败
    }
    template <class T>
    void SeqList<T>:: print_List()
    {
        for(int i=0;i<length;i++) cout<<data[i]<<" ";
    }
    int main()
    {
        //使用以上功能的代码就不给出了
    }
    
     
  • 相关阅读:
    当Django模型迁移时,报No migrations to apply 问题时
    django--各个文件的含义
    django--创建项目
    1013. Battle Over Cities (25)
    1011. World Cup Betting (20)
    1009. Product of Polynomials (25)
    1007. Maximum Subsequence Sum (25)
    1006. Sign In and Sign Out (25)
    1008. Elevator (20)
    1004. Counting Leaves (30)
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/12798617.html
Copyright © 2011-2022 走看看