《数据结构》实验三:
线性表综合实验
一.实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
二.实验时间
准备时间为第 7 周到第 8 周,具体集中实验时间为第 4 周第 2 次课。
2个学时。
三.实验内容
1.建立一个由 n 个学生成绩的顺序表,n 的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
要求如下:
(1)用顺序表实现
采用多文件工程模式
#ifndef Score_H //避免重复包含Score.h头文件
#define Score_H
const int MaxSize=100; //线性表最多有100个元素
class Score
{
public:
Score(){length=0;} //无参考构造函数,构建一个空表
Score(int a[],int n); //有参构造函数
~Score(){}; //析构函数
void Insert(int i,int x); //在线性表第i个位置插入值为x的元素
int Delete(int i); //删除线性表的第i个函数
int Locate(int x); //求线性表中值为x的元素序号
void PrintList(); //按序号依次输出各个元素
private:
int data[MaxSize]; //存放数据元素的数组
int length;
};
#endif
#include<iostream> //引入输入输出流
using namespace std;
#include"Score.h" //引入输入输出流
//以下是类Score的成员函数定义
Score::Score(int a[],int n)
{
if(n>MaxSize)throw"参数非法";
for(int i=0;i<n;i++)
data[i]=a[i];
length=n;
}
void Score::Insert(int i,int x)
{
if(length>MaxSize)throw"上溢";
if(i<1||i>length+1)throw"位置非法";
for(int j=length;j>=i;j--)
data[j]=data[j-1]; //第j个元素存放在数据下标为j-1处
data[i-1]=x;
length++;
}
int Score::Delete(int i)
{
if(length==0)throw"下溢";
if(i<1||i>length)throw"位置非法";
int x=data[i-1];
for(int j=i;j<length;j++)
data[j-1]=data[j]; //此处j已经是元素所在的数组下标
length--;
return x;
}
int Score::Locate(int x)
{
for(int i=0;i<length;i++)
if(data[i]==x) return i+1; //下标为i的元素其序号为i+1
return 0; //查找失败,退出循环
}
void Score::PrintList()
{
for(int i=0;i<length;i++)
cout<<data[i]<<" ";
cout<<endl;
}
#include<iostream> //引入输入输出流
using namespace std;
#include"Score.h" //引入输入输出流
void main()
{
int r[5]={100,90,80,70,60};
Score L(r,5);
cout<<"执行插入操作前数据为:"<<endl;
L.PrintList(); //输出所有元素
try
{
L.Insert(2,55); //在第2个位置插入值为55的元素
}
catch(char *s)
{
cout<<s<<endl;
}
cout<<"执行插入操作后数据为:"<<endl;
L.PrintList(); //输出所有元素
cout<<"值为90的元素位置为:";
cout<<L.Locate(90)<<endl; //查找元素90,并返回在顺序表中位置
cout<<"执行删除第一个元素操作,删除前数据为:"<<endl;
L.PrintList(); //输出所有元素
try
{
L.Delete(1); //删除第1个元素
}
catch(char *s)
{
cout<<s<<endl;
}
cout<<"删除后的数据为:"<<endl;
L.PrintList(); //输出所有元素
}
运行结果为: