顺序表

线性表
是零个或多个具有相同类型的数据元素的有限序列
数据元素的个数定义为线性表的 长度 。
长度等于零时称为空表。
一个非空表通常记为 L = ( a 1 , a 2 ,……, a n )
其中, a i ( 1 ≤ i ≤ n )称为数据元素,下标 i 表示该元素在线性表中的位置或序号, 称元素 a i 位于表的第 i 个位置,或称 a i 是表中的第 i 个元素。

顺序表
线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素。
在这里插入图片描述

const int Maxsize=100;
template <class T>
class SeqList{ 
 private: 
  T data[MaxSize]; // 存放数据元素的数组 
  int length; // 线性表的长度 
 public: 
  SeqList ( ) ;// 无参构造函数   
  SeqList ( T a[ ], int n ) ; // 有参构造函数 
  ~SeqList( ) { } // 析构函数为空 
  int Length ( ) {return length;} // 求线性表的长度 
  T Get ( int i ); // 按位查找,取线性表的第 i 个元素 
  int Locate ( T x ) ; // 按值查找,求线性表中值为 x 的元素序号 
  void Insert ( int i, T x ) ; // 在线性表中第 i 个位置插入值为 x 的元素 
  T Delete ( int i ) ; // 删除线性表的第 i 个元素 
  void PrintList ( ) ; // 遍历线性表,按序号依次输出各元素 
};
  • 构造函数
    无参构造函数
    SeqList ( ) {length=0;}
    构造一个非空的顺序表
    SeqList ( T a[ ], int n ) ; // 有参构造函数
template <class T> 
SeqList<T>:: SeqList(T a[], int n)
{
  if (n>MaxSize) throw "参数非法";
  for (int i=0; i<n; i++)  
    data[i]=a[i];
  length=n;
}

  • 插入算法
template <class T> 
void SeqList<T>::Insert(int i, T x){ 
    int j;
    if (length>=MaxSize) throw "上溢";
    if (i<1 || i>length+1) throw "位置";
    for (j=length; j>=i; j--)
          data[j]=data[j-1];   
    data[i-1]=x;
    length++;
}

时间复杂性为O(n)

  • 删除操作
template <class T>
T SeqList<T>::Delete(int i){ 
   int j; 
   T  x;
  if (length==0) throw "下溢";
  if (i<1 || i>length) throw "位置";
  x=data[i-1];
  for (j=i; j<length; j++)
    data[j-1]=data[j]; 
  length--;
  return x;
}

时间复杂性为O(n)

  • 按位置查找
template <class T> 
T SeqList<T>::Get(int i)
{
    if (i<1 && i>length) throw "查找位置非法";
    else return data[i-1];
}

时间复杂度为 O ( 1 )

  • 按值查找
template <class T>
int SeqList<T>::Locate(T x){     
   for (int i=0; i<length; i++)
    if (data[i]==x) 
      return i+1 ;  //下标为i的元素等于x,返回其序号i+1
   return 0;  //退出循环,说明查找失败
}

时间复杂性为O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值