顺序表

定义:
顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。

顺序结构:将表中元素一个接一个的存入一组连续的存储单元中。

const int M=100;
template <class T>  
class Seq{
 private: 
  T data[M];  // 存放数据元素的数组 
  int length;  // 线性表的长度 
 public:
  Seq ();  // 无参构造函数   
  Seq (T a[ ], int n);  // 有参构造函数 
  ~Seq (){}  // 析构函数为空 
  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 ();  // 遍历线性表,按序号依次输出各元素 
}; 

基本操作:
插入:
1 如果顺序表已满,抛出上溢异常
2 如果元素插入位置不存在,抛出位置异常
3 将最后一个元素至第i个元素(i为插入位置)向后移动一个位置
4 将元素插入到i位置
5 将顺序表的长度增1

template <class T> 
void Seq<T>::Insert (int i, T x){ 
    int j;
    if (length>=M) throw "上溢";
    if (i<1 || i>length+1) throw "位置";
    for (j=length; j>=i; j--)
          data[j]=data[j-1];   
    data[i-1]=x;
    length++;
}

删除:
1 如果顺序表已空,抛出下溢异常
2 如果元素删除位置不存在,抛出位置异常
3 取出被删除的元素
4 将下标为i,i+1…n-1的元素一次移到i-1,i,…n-2的位置
5 将顺序表的长度减1,返回被删除的元素

template <class T>
T Seq<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; //有返回值
}

判断是否空表:

int Empty (L)
{ 
// 初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE
	if(L.length==0)
		return TRUE;
	else
		return FALSE;
}

查找:
1.按值查找:

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

2.按位置查找:

template <class T> 
T Seq<T>::Get (int i)
{
    if (i<1 && i>length) throw "位置非法";  //i必在表长度内
    else return data[i-1];  //第 i 个下标为 i-1
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值