📄 seqlist.h
字号:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
const int defaultSize=100;
struct Student
{
string stu_code;
string stu_name;
string stu_sex;
};
class SeqList
{
private:
int * data; //顺序表数组
int maxSize; //顺序表最大长度
int last; //顺序表最后一位
public:
SeqList() //构造函数
{
last=0;
maxSize=defaultSize;
data = new int [defaultSize];
}
SeqList(SeqList & L); //拷贝构造函数
~SeqList() //析构函数
{
Student * p;
for (int i = 0; i <= last-1; i++) //释放结构体的内存空间
{
p=(struct Student *)data[i];
delete p;
}
delete []data; //释放动态数组的内存空间
}
int getData(int i)const //取第i项的值
{return data[i];}
int Size()const //取顺序表大小
{return maxSize;}
int IsFull() //判断顺序表是否为满
{return (last == maxSize)? 0 : 1; }
int IsEmpty() //判断顺序表是否为空
{return (last == 0) ? 0 : 1 ; }
int Length()const //取顺序表最后一项位置
{return last;}
void input(); //输入学生信息
void output(); //输出学生信息
void Insert(int x,string code,string name,string sex); //插入学生信息
void Replace(int i,string code,string name,string sex); //修改学生信息
int Remove(int i); //删除学生信息
void Search(int t,string x); //搜索学生信息
int print(int i); //输入第i项的值
int Export(); //将顺序表的值保存
};
SeqList::SeqList(SeqList & L) //拷贝构造函数
{
maxSize = L.Size();
last = L.Length();
data = new int[maxSize];
if (data == NULL)
{
cerr<<"内存分配错误!"<<endl;
exit(1);
}
for (int i = 0; i <= last-1; i++)
data[i] = L.getData(i);
}
void SeqList::Insert(int x,string code,string name,string sex) //插入学生信息
{
if(x < 1|| x > last+1)
{
cerr<<"插入位置非法!"<<endl;
system("pause");
return;
}
Student * p=new Student; //申请新的student空间
if (x == last+1) //插入的位置为顺序表结尾
{
data[last]=(int)p; //将新申请到的空间地址写入插入位置
p->stu_code=code; //通过指针赋值
p->stu_name=name;
p->stu_sex=sex;
last++;
return;
}
for (int j = last; j>= x; j--) //插入位置为顺序表中间
data[j]=data[j-1]; //顺序表值依次后移
data[x-1]=(int)p; //将新申请到的空间地址写入插入位置
p->stu_code=code; //通过指针赋值
p->stu_name=name;
p->stu_sex=sex;
last++;
}
void SeqList::Replace(int i,string code,string name,string sex)
{
Student * p; //新建结构体指针
p=(struct Student *)data[i-1]; //将顺序表储存的数据转化为指针值
p->stu_code=code; //通过指针修改
p->stu_name=name;
p->stu_sex=sex;
return;
}
int SeqList::Remove(int i)
{
if(i < 1 || i > last )
{
cerr<<"删除位置非法!"<<endl;
system("pause");
return 0;
}
Student * p; //新建结构体指针
p=(struct Student *)data[i-1]; //将顺序表储存的数据转化为指针值
for (int j = i; j <= last-1; j++) //顺序表前移
data[j-1] = data[j];
last--;
delete p; //释放结构体空间
return 1;
}
void SeqList::Search(int t,string x)
{
int id,i,j=0;
int * data1; //定义一个存放结果位置的数组
data1 = new int [last];
Student *p; //新建结构体指针
switch(t)
{
case 1: //学号查询
for (i = 0; i<=last - 1; i++)
{
p=(struct Student *)data[i];
if (p->stu_code == x)
{data1[j]=i; j++;}
}
break;
case 2: //姓名查询
for (i = 0; i<=last - 1; i++)
{
p=(struct Student *)data[i];
if (p->stu_name == x)
{data1[j]=i; j++;}
}
break;
case 3: //性别查询
for (i = 0; i<=last - 1; i++)
{
p=(struct Student *)data[i];
if (p->stu_sex == x)
{data1[j]=i;j++;}
}
break;
}
if (data1[0]<0)
{
cerr<<"所查询的信息不存在!"<<endl;
system("pause");
return;
}
for (i=0; i<=j-1; i++) //输出查询到的值
{
id=data1[i];
cout<<i+1<<" 第"<<data1[i]+1<<"项:"<<endl;
print(id);
}
system("pause");
return;
}
void SeqList::input()
{
cout<<"开始建立顺序表,请输入表中元素个数:";
while(1)
{
cin>>last;
if (last<=maxSize-1 && last >= 1) break;
cout<<"表元素个数输入有误!"<<endl;
}
for (int i=0; i<= last-1; i++)
{
Student *p=new Student; //新建结构体
data[i]=(int)p; //将申请到的结构体空间地址写入顺序表中
cout<<"请输入第"<<i+1<<"个学生的学号:";
cin>>p->stu_code;
cout<<"请输入第"<<i+1<<"个学生的姓名:";
cin>>p->stu_name;
cout<<"请输入第"<<i+1<<"个学生的性别:";
cin>>p->stu_sex;
cout<<"第"<<i+1<<"个学生"<<p->stu_name<<"的信息录入完成"<<endl;
system("pause");
}
return;
}
void SeqList::output()
{
cout<<"顺序表当前元素最后位置为:"<<last<<endl;
for(int i = 0; i<= last-1; i++)
{
Student *p;
p=(struct Student *)data[i];
cout<<i+1<<":"<<endl;
cout<<"学号:"<<p->stu_code<<endl;
cout<<"姓名:"<<p->stu_name<<endl;
cout<<"性别:"<<p->stu_sex<<endl;
}
system("pause");
return;
}
int SeqList::print(int i)
{
if(i < 0|| i > last)
{
cerr<<"位置非法!"<<endl;
system("pause");
return 0;
}
Student *p;
p=(struct Student *)data[i];
cout<<"学号:"<<p->stu_code<<endl;
cout<<"姓名:"<<p->stu_name<<endl;
cout<<"性别:"<<p->stu_sex<<endl;
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -