数据结构之顺序表C++实现

来源:互联网 发布:c语言二叉树非递归遍历 编辑:程序博客网 时间:2024/06/05 06:49

/*----------sqlist.h----------*/

 

#ifndef SQLIST_H
#define SQLIST_H
//起始下标为 1 
//最大下标为 SIZE
const int SIZE(10);
              //此处修改默认表长大小
template <typename Type> class Sqlist{
public:
 Sqlist(int maxsize=SIZE)
 {
  while(maxsize<1){
   cout << "设置最大表长有误,请重新设置->: " ;
   cin >> maxsize;
  }
  MaxSize=maxsize;
  data=new Type[MaxSize+1]; // data[MaxSize] 为表满状态
  last=0; //空表状态
 }
 ~Sqlist()
 {
  delete [] data;
 }
 void Clear() //清空顺序表
 {
  last=0;
 }
 bool Empty() //判空
 {
  if(last==0)
   return true;
  else
   return false;
 }
 status push_back(const Type &value) //压入(后插)
 {
  if(last==MaxSize){
   cerr << "顺序表已满,操作失败! " << endl;
   return 0;
  }else {
   data[last+1]=value;
   last++;
   return 1;
  }
 }
 void Display() //显示
 {
  for(int i=1;i<=last;i++)
   cout << data[i] << " ";
  cout << endl;
 }
 Type GetElem(int i) //取元素
 {
  if(last==0){
   cerr << "顺序表为空,操作失败! " ;
   goto end;
  }
  if(i<1||i>last){
   cerr << "下标越界,请检查->: ";
   goto end;
  }
  return data[i];
  end:cout << endl;
 }
 int Locate(const Type &value) //定位查找
 {
  if(last==0){
   cerr << "顺序表为空,操作失败!" << endl;
   return 0;
  }
  for(int i=1;i<=last;i++)
   if(data[i]==value)
    return i;
  cerr << "顺序表中没有此元素:" << value << " !" <<endl;
  return 0;
 }
 status Insert(int i,const Type &value) //插入操作
 {
  if(last==MaxSize){
   cerr << "顺序表已满,操作失败!" << endl;
   return 0;
  }
  if(i<1||i>last+1){
   cerr << "插入位置有误,请检查: " << endl;
   return 0;
  }
  for(int j=last;j>=i;j--)
   data[j+1]=data[j];
  data[i]=value;
  last++;
 }
 status Delete(int i) //删除操作
 {
  if(last==0){
   cerr << "顺序表为空,操作失败! " << endl;
   return 0;
  }
  if(i<1||i>last){
   cerr << "下标越界,请检查:" << endl;
   return 0;
  }
  for(int j=i;j<last;j++)
   data[j]=data[j+1];
  last--;
  return 1;
 }
 int length()
 {
  return last;
 }
 int size()
 {
  return last;
 }
 status Replace(int i,const Type &value) //替换
 {
  if(last==0 || i<1 || i > last){
   cerr << "下标越界,操作失败。" << endl;
   return 0;
  }else{
   data[i]=value;
   return 1;
  }
 }
 Type operator [](int i) //重载 []
 {
  if(i<1||i>last||last==0){
   cerr << "下标越界,请检查! " << endl;
   exit(0);
  }else
   return data[i];
 }
  

private:
 Type *data;
 int last;
 int MaxSize;
};

 

#endif

 

//本人正在自学数据结构,欢迎老师批评指正,谢谢关注

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝发烧一直吐怎么办 小孩发烧一直吐怎么办 小孩子发烧一直吐怎么办 孩子吐还拉稀怎么办 宝贝拉肚子又吐怎么办 小孩子发烧呕吐拉肚子怎么办 小孩受凉呕吐拉肚子怎么办 一周岁宝宝发烧怎么办 宝宝吃了吐怎么办 儿子喝水都吐怎么办 宝宝吐奶拉肚子怎么办 怀孕吐的厉害怎么办 孩子一直呕吐怎么办啊 仓鼠宝宝拉稀了怎么办 2岁有点拉稀怎么办 婴儿吃米粉腹泻怎么办 小儿胃寒呕吐怎么办 孩子突然一直吐怎么办 宝宝呕吐并发烧怎么办 宝宝发烧呕吐拉稀怎么办 小孩发高烧还吐怎么办 二个多月的宝宝拉肚子怎么办 宝宝肚子着凉吐怎么办 孩子胃着凉呕吐怎么办 一岁受凉呕吐怎么办 孩子着凉了呕吐怎么办 小孩受凉呕吐腹泻怎么办 宝宝胃受寒呕吐怎么办 一岁半宝宝受寒呕吐怎么办 治小儿反复发烧怎么办 海洋宝宝吃下去怎么办 两岁儿童拉肚子怎么办 14天宝宝拉肚子怎么办 小孩不消化引起发烧怎么办 宝宝胃胀呕吐怎么办 小儿胃胀不消化怎么办 4岁小儿腹胀怎么办 两岁半的宝宝吐怎么办 月子宝宝闹人怎么办 宝宝一周岁拉肚子怎么办 一岁幼儿呕吐怎么办