您的位置:首页 > 其它

顺序表的实现

2016-03-06 13:31 465 查看
#include"iostream.h"

#include"string.h"

//顺序表的定义

template<class T> class SeqList

{

T *data;

int MaxSize;//最长度大

int last;//当前最后元素下标

public:

SeqList(int);

~SeqList()

{

delete[] data;

}

int Length() const

{

return last+1;

}

int Find(T &x);//查找

int Insert(T &x,int i);//插入

int Remove(T &x);//删除

void Display();//打印

int IsEmpty()

{

return last==-1;

}

int IsFull()

{

return last==MaxSize-1;

}

T Get(int i)//获取

{

if(i>last||i<0) {cout<<"位置异常"<<endl; }

else return data[i];

}

};

//顺序表的实现

template<class T>

SeqList<T>::SeqList(int sz)

{

if(sz>0)

{

MaxSize=sz;

last=-1;

data=new T[MaxSize];

if(data==NULL)

{

MaxSize=0;

last=-1;

return;

}

}

}

template<class T>

int SeqList<T>::Find(T &x)

{

int i;

for(i=0;i<=last;i++)

if (data[i]==x)

return i;

return -1;

}

template<class T>

int SeqList<T>::Insert(T &x,int i)

{

if(i<0||i>last+1||last==MaxSize-1)

return 0;

else

{

last++;

for(int j=last;j>i;j--)

data[j]=data[j-1];

data[i]=x;

return 1;

}

}

template<class T>

int SeqList<T>::Remove(T &x)

{

int i=Find(x);

if(i>=0)

{

last--;

for(int j=i;j<=last;j++)

data[j]=data[j+1];

return 1;

}

return 0;

}

template<class T>

void SeqList<T>::Display()

{

for(int i=0;i<=last;i++)

{

cout<<data[i]<<endl;

}

}

//Student类定义

class Student

{

public:

int id;

char name[20];

int year;

int score;

bool operator==(const Student &);

};

//Student类的实现

bool Student::operator==(const Student &s)//重载==运算符

{

if(this==&s)

return true;

if((id==s.id)&&(strcmp(name,s.name)==0)&&(year==s.year)&&(score==s.score))

return true;

else return false;

}

ostream& operator<<(ostream &os,Student &s)//重载<<运算符

{

os<<s.id<<" "<<s.name<<" "<<s.year<<" "<<s.score<<endl;

return os;

}

istream& operator>>(istream &is,Student &s)//重载>>运算符

{

cout<<"请输入此学生的学号,姓名,入学年份,分数"<<endl;

is>>s.id>>s.name>>s.year>>s.score;

return is;

}

//主函数

void main()

{

int i,j,k,m;

SeqList<Student> S(10);

Student S1,S2,S3,S4,S5,S6,S7,S8;

int flag=0;

while(flag==0)

{

cout<<"顺序表的实现(模板类)"<<endl;

cout<<"************************************"<<endl;

cout<<"* 1:创建表格 *"<<endl;

cout<<"* 2:插入记录 *"<<endl;

cout<<"* 3:删除记录 *"<<endl;

cout<<"* 4:查询记录 *"<<endl;

cout<<"* 5:打印表格 *"<<endl;

cout<<"* 6:exit.退出 *"<<endl;

cout<<"************************************"<<endl;

cout<<"请输入您的选择:";

cin>>j;

switch(j)

{

case 1:

cin>>S1>>S2;

S.Insert(S1,0);

S.Insert(S2,1);

break;

case 2:

cin>>S3;

i=S.Find(S1);

S.Insert(S3,i+1);

cin>>S4;

S.Insert(S4,i);

i=S.Find(S2);

cin>>S5;

S.Insert(S5,i+1);

break;

case 3:

S6=S.Get(0);

S.Remove(S6);

k=S.Length();

S7=S.Get(k-1);

S.Remove(S7);

break;

case 4:

cout<<"请输入您要查询的记录:";

cin>>S8;

m=S.Find(S8);

if(m<0)

cout<<"不存在此记录!";

else

cout<<"存在记录:"<<S8;

break;

case 5:

S.Display();

break;

case 6:

flag=1;

break;

default:

cout<<"没有此命令!"<<endl;

}

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: