一.实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相
关知识来解决具体问题。
二.实验内容
1.建立一个由n 个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己
确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
1) 用顺序表来实现。
2) 用单链表来实现。
3) 用双链表实现。
4) 用静态链表实现。
5) 用间接寻址实现。
1)顺序表:
#include<iostream>
using namespace std;
const int MaxSize=100;
class Student
{
int data[MaxSize];//建立数组
int length;//线性表长度
public:
Student(){length=0;} //建立空表
Student(int a[],int n); //建立长度为n顺序表
~Student(){}//析构函数
int Get(int i);//按位查找,第i个
void Input (int i,int x);//插入
int Delete(int i);//删除
void Print();//输出
};
Student::Student(int a[],int n)
{
int i;
if(n>MaxSize)throw"参数非法";
for(i=0;i<n;i++)
data[i]=a[i];
length=n;
}
int Student::Get(int i)
{
if(i<1&&i>length)
throw"查找位置非法";
return data[i-1];
}
void Student::Input(int i,int 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];
data[i-1]=x;
length++;
}
int Student::Delete(int i) //删除
{ int x,j;
if(length==0)throw"下溢";
if(i<1||i>length)throw"位置";
x=data[i-1];
for(j=i;j<length;j++)
data[j-1]=data[j];
length--;
return x;
}
void Student::Print() //输出
{
int i;
for(i=1;i<length;i++)
cout<<"第"<<i<<"位学生成绩:"<<data[i-1]<<endl;
cout<<endl;
}
void main()
{
int a[5]={50,60,70,80,90};
Student L(a,5);
cout<<"录入学生信息:"<<endl;
L.Print();
cout<<"在第2个位置插入85"<<endl;
L.Input(2,85);
cout<<"插入后学生成绩为:"<<endl;
L.Print();
cout<<"第三位学生成绩为:"<<endl;
cout<<L.Get(3)<<endl;
cout<<"删除第一个学生成绩"<<endl;
L.Delete(1);
cout<<"删除后学生成绩为:"<<endl;
L.Print();
}
2)单链表
#include <iostream>
using namespace std;
struct Std{
int data;
Std *next;
}*p,*q;
class Student
{
private:
S