一.实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
二.实验内容
1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
要求如下:
1)用顺序表来实现。
三、实验代码
#include <iostream>
using namespace std;
const int MaxSize=10;
class SeqList
{
public:
SeqList() {length=10;}
SeqList(int a[],int n);
~SeqList(){}
void Insert(int i,int x);
int Delete(int i);
int Locate(int x);
void PrintList();
private:
int data[MaxSize];
int length;
};
SeqList::SeqList (int a[],int n)
{
if(n>MaxSize) throw"非法参数";
for(int i=0;i<n;i++)
data[i]=a[i];
length=n;
}
void SeqList::Insert (int i,int x)
{
if(i<1||i>length) throw"位置非法";
for (int j=length;j>=i;j--)
data[j]=data[j-1];
data[i-1]=x;
length++;
}
int SeqList::Delete (int i)
{
if(i<1||i>length) throw"位置非法";
int x=data[i-1];
for (int j=i;j<length;j++)
data[j-1]=data[j];
length--;
return x;
}
int SeqList::Locate (int x)
{
for(int i=0;i<length;i++)
if(data[i]==x) return i+1;
return 0;
}
void SeqList::PrintList ()
{
for(int i=0;i<length;i++)
cout<<data[i]<<" ";
cout<<endl;
}
int main()
{
int i,n,x,a,b,c;int r[n];
cout<<"输入学生数量:"<<endl;
cin>>n;
cout<<"输入学生成绩:"<<endl;
for(i=0;i<n;i++)
cin>>r[i];
SeqList L(r,n);
cout<<"执行插入操作前数据为:"<<endl;
L.PrintList ();
cout<<"在位置a插入成绩b"<<endl;
cout<<"请输入a,b:"<<endl;
cin>>a>>b;
L.Insert (a,b);
cout<<"插入后成绩为:"<<endl;
L.PrintList ();
cout<<"请输入值要查找的成绩x,并自动找出元素位置:";
cin>>x;
cout<<"位置为:"<<L.Locate (x)<<endl;
cout<<"删除第c个元素操作,删除前数据为:"<<endl;
L.PrintList ();
cout<<"请输入c:";
cin>>c;
L.Delete (1);
cout<<"删除后数据为:"<<endl;
L.PrintList ();
return 0;
}
五、实验心得
顺序链表是一个连续存储的顺序结构,存储密度比较大。能在一个小的空间能存储比较多的数据,所以占用的空间比较小。还有一个优点就是在按位置查询的时候可以一下子就查询出来,时间复杂度就是O(1),就是可以随机存取。
但是如果按值查找的话,时间复杂度是O.(n),它需要一个一个的去比较插入的数据是否有等于要被查询的数据,然后输出。还有就是在中间插入一个或删除一个数据的时候后面的数据都需要一个一个往后移或者往前移,时间复杂度也是O(n)。所以如果需要频繁的插入或删除数据的话不适合用顺序表。