// 工程名: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();
}