顺序存储,无非就是数组
首先创建SeqList.h头文件用以包含基本构造函数,及其功能实现再新建一个SeqList.cpp。代码实现用模板类定义:
//SeqList.h
const int MaxSize=100;
template<class T>
class SeqList{
public:
SeqList(){
length=0;
}
SeqList(T a[],int n);//有参构造函数
~SeqList(){};//析构函数
int GetLength(){
return length;
}
T Get(int i);
//去顺序表中第i个元素
void Set(int i,T x);
void Insert(int i, T x); // 在顺序表中第i个位置插入元素x
T Delete(int i); // 删除顺序表的第i个元素
int Locate(T x);
void PrintList();
private:
T data[MaxSize];
int length;
};
*************
//SeqList.cpp
#include<iostream>
#pragma hdrstop
#include "SeqList.h"
using namespace std;
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;
}
}
// 插入函数Insert,将x插入到顺序表第i个位置
template<class T>
void SeqList<T>::Insert(int i, T x)
{ int j;
if (length>=MaxSize) throw "上溢";
if (i<1 || i>length+1) throw "位置错误";
for (j=length; j>=i; j--)
data[j]=data[j-1]; //注意第j个元素存在数组下标为j-1处
data[i-1]=x;
length++;
}
// 删除函数Delete,删除顺序表中第i个元素
template <class T >
T SeqList<T>::Delete(int i)
{ int j;
if (length==0 ) throw "下溢";
if (i<1 || i>length) throw "位置错误";
T x=data[i-1];
for (j=i; j<length; j++)
data[j-1]=data[j]; //注意此处j已经是元素所在的数组下标
length--;
return x;
}
// 定位函数Locate,确定x在顺序表中的位置
template <class T >
int SeqList<T>::Locate(T x)
{
for(int i=0;i<length;i++)
if(x==data[i])
return i+1;
return 0;
}
//取函数Get,从顺序表中返回第i个元素
template <class T>
T SeqList<T>::Get(int i)
{ if (i>0 && i<=length)
return data[i-1];
else
{ T stu;
return stu;
}
}
//增加的,设定线性表第i个元素
template <class T>
void SeqList<T>::Set(int i,T x)
{ if (1<=i && i<=length+1)
data[i-1]=x;
else
throw "位置出错";
}
template <class T>
void SeqList<T>::PrintList(){
for(int i=0;i<length;i++)
cout<<data[i]<<" ";
}
测试类
//SeqListdemo1.cpp
#include<iostream>
#include "SeqList.cpp"
using namespace std;
int main(){
SeqList<int> d;
try{
d.Insert(1,10);
d.Insert(2,20);
d.Insert(3,30);
cout<<"按位查找第二个元素:"<<d.Get(2)<<endl;
cout<<"按值查找20的位置:"<<d.Locate(20)<<endl;
cout<<"删除第二个元素:"<< d.Delete(2)<<endl;
cout<<"顺序表的长度:"<<d.GetLength()<<endl;
//cout<<"顺序表的元素:"<<d.PrintList();
int a[]={1,2,3,4,5,6,7};
SeqList<int> g(a,7);
cout<<"在第三个位置上插入元素8"<<endl;
g.Insert(3,8);
//cout<<"插入后的顺序表元素为:"<< g.PrintList();
}
catch(char* msg){
cout<<msg;
}
return 0;
}