实验二之顺序表

来源:互联网 发布:淘宝引流宝活动词 编辑:程序博客网 时间:2024/06/06 03:51

《数据结构》实验二:

                线性表综合实验

一.实验目的

     巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。

 

二.实验时间

   准备时间为第3周到第4周,具体集中实验时间为第4周第2次课。2个学时。

 

三..实验内容

1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。

要求如下:

1)用顺序表来实现。

2)用单链表来实现。

3)用双链表实现。

4)用静态链表实现。

5)用间接寻址实现。

分开写程序,可以一个方法分别写一博客文章上交作业。

 

2.实现两个集合的相等判定、并、交和差运算。要求:

  1)自定义数据结构

  2)自先存储结构,并设计算法。在VC中实现。

以上三题,第1题必须完成。第2和第3题可以作为选做题。


四.实验报告

1.在博客中先写上实习目的和内容,画出主要操作运算算法图,然后分别上传程序代码。插入调试关键结果截图。

2.单独写一个博文,比较总结线性表的几种主要存储结果。


五、实验心得

由于之前已经弄过有关顺序表的了,所以这次弄起来比上一次得心应手多了,但是由于知识还是不牢固,中间还是弄出了很多错误,所以就对着书修修改改,但是还是有很多错误找不到,顺序表应该算是这几个之间比较简单的了,但是还是弄得不成功,甚至还可以说是弄得最不好的一个了,不过有错误出现,才知道自己是哪里不行,没有掌握,我会通过这次实验找出自己的不足的,从而改进自己。


源代码如下:

#include<iostream>
#include<string>
using namespace std;
const int MaxSize=100;
bool error;


template<class DataType>//定义模板类 
class SeqList
{
    int i;
public:
SeqList(){length=0;} //无参构造函数 
SeqList(DataType a[],int n);
~SeqList(){}
int Length(){return length;}//求线性表的长度 
DataType Get(int i);//按位查找 
int Locate(DataType x);//按值查找 
void Insert(int i,DataType x);//插入 
DataType Delete(int i);//删除 
private:
DataType data[MaxSize];
int length;
};


template<class DataType>//有参构造函数
SeqList<DataType>::SeqList(DataType a[],int n)
{

if(n>MaxSize)throw"参数非法";
for(i=0;i<n;i++)
data[i]=a[i];
length=0; 
}


template<class DataType>//按位查找 
DataType SeqList<DataType>::Get(int i)
{
if(i<1&&i>length)throw"查找位置非法";
else return data[i-1];
}


template<class DataType>//按值查找 
int SeqList<DataType>::Locate(DataType x) 
{
for(i=0;i<length;i++)
if(data[i]==x)return i+1;
return 0;
}


template<class DataType>
void SeqList<DataType>::Insert(int i,DataType x)//插入
{   int j;
if(length>=MaxSize)throw"上溢";
if(i<1||1>length+1)throw"位置";
for(j=length;j>=i;j--)
data[j]=data[j-1];
data[i-1]=x;
length++; 
}
 
template<class DataType>  //删除                                                                                                                                                                                                              
DataType SeqList<DataType>::Delete(int i)
{   
    int j,x;
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;
}


int main()
{   
    cout<<"请选择你的想要的操作:\n"<<endl;
cout<<"<1> 录入学生成绩\n"<<endl;
    cout<<"<2> 查找学生成绩\n"<<endl;
    cout<<"<3> 插入学生成绩\n"<<endl;
cout<<"<4> 删除学生成绩\n"<<endl;
    cout<<"<5> 退出\n\n"<<endl;
SeqList<int>List;
    int flag,ins_loc,x,tab,len;
    flag=0; 
    while (flag==0)
   {
      error=false;
      cout<<"Please input the command:"<<endl;
      cin>>tab;
  switch(tab)
  {
  case 1:
   {
   int r[100],h,z;
   cout<<"需要录入成绩的学生人数:"<<endl;
   cin>>h;
   for(z=0;z<h;z++)
   {
   cout<<"第"<<z+1<<"个学生的成绩:"<<endl;
   cin>>r[z];
   };
    break;
   }
   
  case 2:
   {
    int ins_loc;
    cout<<"要查找的学生成绩为:"<<endl;
    cin>>ins_loc;
   
    x=List.Get(ins_loc);
    if(!error)
       cout<<"该学生的序号为:1"<<List.Locate(ins_loc)<<endl;
    break;
   }
   
  case 3:
   {
   int ins_loc,x;
   cout<<"新的学生成绩插入在第几个位置之后:"<<endl;
   cin>>ins_loc;
   cout<<"新的学生成绩为:"<<endl;
   cin>>x;
    List.Insert(ins_loc,x);
    break;
    }
    
  case 4:
  {int ins_loc;
     cout<<"需要删除第几个学生的成绩"<<endl;
     cin>>ins_loc;
     List.Delete(ins_loc);
     cout<<"删除该学生的成绩后为:"<<endl;
     break;
    }
  
   case 5:
   {
    flag=1;
    break;
   }
  default:
   {
    cout<<"该命令没有找到!"<<endl;
    break;
   }
  }
}
return 0;
}


实验结果如图片所示:


原创粉丝点击