// 工程名:SeqList
// 文件名:SeqList.h
// 功能:演示循序表的基本操作
// 依赖文件:SeqList.cpp,main.cpp
#ifndef SeqList_H
#define SeqList_H
const int MaxSize=100;
template <class T>
class SeqList
...{
public:
SeqList()...{length=0;}
SeqList(T a[],int n);
void Insert(int i,T x);
T Delete(int i);
int Locate(T x);
void PrintList();
private:
T data[MaxSize];
int length;
};
#endif
// 工程名:SeqList
// 文件名:SeqList.cpp
// 功能:演示循序表的基本操作
// 依赖文件:SeqList.h,main.cpp
#include "SeqList.h"
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) //Insert执行有点问题?已解决!
...{
if(length>=MaxSize)throw "上溢";
if(i<1 || i>length) throw "位置异常"; //原:i>length+1
for(int j=length;j>=i;j--) //原:j>=i
data[j]=data[j-1]; //第j个元素存放在数组下标为j-1处
data[i-1]=x; //或 data[j]=x;第i个元素排在下标i-1处
length++;
}
template<class T>
T SeqList<T>::Delete(int i)
...{
if(length==0) throw "下溢";
if(i<1 || i>length)throw "位置异常";
T x=data[i-1];
for(int j=i;j<length;j++)
data[i-1]=data[i];
length--;
return x;
}
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;
}
template <class T>
void SeqList<T>::PrintList()
...{
for(int i=0;i<length;i++)
cout<<data[i]<<endl;
}
// 工程名:main.cpp
// 文件名:SeqList
// 功能:演示循序表的基本操作
// 依赖文件:SeqList.h,SeqList.cpp
//主函数
#include <iostream.h>
#include "SeqList.cpp"
void main()
...{
int r[]=...{1,2,3,4,5};
SeqList<int> a(r,5);
cout<<"执行插入操作前数据为:"<<endl;
a.PrintList();
try
...{
a.Insert(2,6); //原:3
}
catch(char *s)
...{
cout<<s<<endl;
}
cout<<"执行插入操作后数据为:"<<endl;
a.PrintList(); //Insert执行有点问题?
cout<<"值为3的元素位置为:"<<endl;
cout<<a.Locate(3)<<endl;
cout<<"执行删除第一个元素操作,删除前数据为:"<<endl;
a.PrintList();
try
...{
a.Delete(1);
}
catch(char *s)
...{
cout<<s<<endl;
}
cout<<"删除后数据为:"<<endl;
a.PrintList();
}