1 顺序表的基本操作

类的封装:

#include<iostream>
using namespace std;
template<class T>       //模板声明,数据元素虚拟类型为T
class sq_LList          //顺序表类
{
 private:            //数据成员
  int mm;         //存储空间容量
  int nn;         //顺序表长度
  T   * v;        //顺序表存储空间首地址
 public:
  sq_LList(){mm=0;nn=0;return;}
  sq_LList(int);                 //建立空顺序表,申请存储空间
  void prt_sq_LList();           //顺序输出顺序表中的元素与顺序表长度
  int flag_sq_LList();           //检测顺序表的状态
  void ins_sq_LList(int,T);      //在表的指定元素前插入新元素
  void del_sq_LList(int);        //在表中删除指定元素
};

//建立空顺序表
template<class T> sq_LList<T>::sq_LList(int m)
{
 mm=m;             //存储空间容量
 v=new T[mm];      //动态申请存储空间
 nn=0;             //顺序表长度为0,即建立空顺序表
 return;
}

//顺序输出顺序表中的元素与顺序表长度
template<class T> void sq_LList<T>::prt_sq_LList()
{
 int i;
 cout<<"nn="<<nn<<endl;
 for(i=0;i<nn;i++)cout<<v[i]<<endl;
 return;
}

//检测顺序表的状态
template<class T> int sq_LList<T>::flag_sq_LList()
{
 if(nn=mm)return (-1);      //存储空间已满,返回-1
 if(nn==0)return (0);       //顺序表为空,返回0
 return 1;
}

//在表的指定元素前插入新元素
template<class T> void sq_LList<T>::ins_sq_LList(int i,T b)
{
 int k;
 if(nn==mm)               //存储空间已满,上溢错误
 {cout<<"overflow"<<endl;  return;}
 if(i>nn)i=nn+1;          //默认为在最后一个元素之后插入
 if(i<1)i=1;              //默认为在第一个元素之前插入
 for(k=nn;k>=i;k--)   
  v[k]=v[k-1];         //从最后一个元素直到第i个元素均后移一个位置
 v[i-1]=b;                //插入新元素
 nn=nn+1;                 //顺序表长度加1
 return ;
}

//在顺序表中删除指定元素
template<class T> void sq_LList<T>::del_sq_LList(int i)
{
 int k;
 if(nn==0)                //顺序表为空,下溢错误
 {cout<<"underflow!"<<endl;  return;}
 if((i<1)||(i>nn))        //顺序表中没有这个元素
 {
  cout<<"Not this element in the list!"<<endl;
  return;
 }
 for(k=i;k<nn;k++)
  v[k-1]=v[k];         //从第i个元素直到最后一个元素均前移一个位置
 nn=nn-1;                 //顺序表长度减1
 return;
}

题目:建立容量为100的空顺序表,然后输出该空顺序表。在该顺序表中集资在第0个元素前插入1.5,在第1个元素前插入2.5以及在第4个元素前插入3.5,再输出该顺序表。再输出删除该顺序表中的第0个元素以及删除该顺序表中的第1个元素,再输出该顺序表。

主函数:

#include "sq_LList.h"
int main()
{
 sq_LList<double>  s1(100);
 cout<<"第1次输出顺序表对象sl:"<<endl;
 s1.prt_sq_LList();
 s1.ins_sq_LList(0,1.5);
 s1.ins_sq_LList(1,2.5);
 s1.ins_sq_LList(4,3.5);
 cout<<"第2次输出顺序表对象s1:"<<endl;
 s1.prt_sq_LList();
 s1.del_sq_LList(0);
    s1.del_sq_LList(1);
 cout<<"第3次输出顺序表对象s1:"<<endl;
 s1.prt_sq_LList();
 return 0;
}

 

在第0个元素之前插入1.5,默认为在第一个元素之前插入,所以1.5插在第一个元素的位置上;

接下来,在第一个元素前插入2.5,即在1.5之前插入,这点一开始不理解(注意)

在第4个元素之前插入3.5,因为现在顺序表中只有两个元素,所以默认在最后一个位置插入。运行到这儿时,输出结果为:

第1次输出顺序表对象s1:

nn=0

第2次输出顺序表对象s1:

nn=3

2.5

1.5

3.5

删除元素,删除第0个元素,不存在,出现异常,显示结果;删除第1个元素,这样理解,根据题目中的做法,应该是删除第一个插入的元素1.5,按我的理解,现在顺序表中数据依次为2.5, 1.5, 3.5,所以删除顺序表中的第一个元素,应该是删除2.5

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值