《数据结构》实验二: 线性表综合实验——(1)顺序表

来源:互联网 发布:韩子高 网络剧 编辑:程序博客网 时间:2024/06/05 07:12

《数据结构》实验二:

                线性表综合实验

一.实验目的

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

 

二.实验时间

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

 

三..实验内容

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

要求如下:

1)用顺序表来实现。

2)用单链表来实现。

3)用双链表实现。

4)用静态链表实现。

5)用间接寻址实现。

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

 

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

  1)自定义数据结构

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

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

四.实验报告

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

 

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


1)用顺序表来实现。(C++)

1、操作运算算法图:

删除数据函数:



修改数据函数:



查找(按学号或姓名)函数:



遍历函数:



2、实验代码:


头文件:

#include<iostream>#include<iomanip>#include<string>using namespace std;


Student 结构体:

static int length=0;//计算已录入的学生人数struct Student//建立Student结构体{string name;int number;int chinese;int english;int sum;}stu[50];


插入数据函数:

void Insert(string na,int n,int c,int e){   stu[length].name=na;stu[length].number=n;stu[length].chinese=c;stu[length].english=e;stu[length].sum=c+e;length++;}


删除数据函数:

void Delete(int i){cout<<setw(10)<<stu[i].name<<setw(8)<<stu[i].number<<setw(10)<<stu[i].chinese<<setw(10)<<stu[i].english<<setw(8)<<stu[i].sum<<endl;for(int j=0;j<length-i;j++){stu[i-1+j]=stu[i+j];}length--;}


修改数据函数:

void Change(){int j;int k;int i;int n;string m;do{cout<<"请输入需要修改的序号。"<<endl;cin>>i;cout<<"若修改名字,请输入1;若修改学号,请输入2;"<<endl;    cout<<"若修改语文成绩,请输入3;若修改英语成绩,请输入4!"<<endl;cin>>j;cout<<"请输入正确的信息!"<<endl;switch(j){case 1:cin>>m;stu[i-1].name=m;break;case 2:cin>>k;stu[i-1].number=k;break;case 3:cin>>k;stu[i-1].chinese=k;break;case 4:cin>>k;stu[i-1].english=k;break;    default:cout<<"输入有误,请重新操作!"<<endl;}    stu[i-1].sum=stu[i-1].chinese+stu[i-1].english;    cout<<setw(10)<<stu[i-1].name<<setw(8)<<stu[i-1].number<<setw(10)<<stu[i-1].chinese<<setw(10)<<stu[i-1].english<<setw(8)<<stu[i-1].sum<<endl;cout<<"若需继续修改请输入1,否则输入0!"<<endl;cin>>n;}while(n==1);}

查找数据函数(按位置):

void Get(int i){    cout<<setw(10)<<stu[i].name<<setw(8)<<stu[i].number<<setw(10)<<stu[i].chinese<<setw(10)<<stu[i].english<<setw(8)<<stu[i].sum<<endl;}


查找数据函数(按学号或姓名):

void Locate(){int i,n;int t=0;int j;string m;do{cout<<"若依据学号查找,请输入1;若依据姓名查找,请输入2!"<<endl;cin>>i;switch(i){case 1:cout<<"请输入学生学号!"<<endl;cin>>j;for(n=0;n<length-1;n++){if(stu[n].number == j){cout<<setw(10)<<stu[n].name<<setw(8)<<stu[n].number<<setw(10)<<stu[n].chinese<<setw(10)<<stu[n].english<<setw(8)<<stu[n].sum<<endl;}}break;     case 2:cout<<"请输入学生姓名!"<<endl;cin>>m;for(n=0;n<length-1;n++){if(stu[n].name == m){cout<<setw(10)<<stu[n].name<<setw(8)<<stu[n].number<<setw(10)<<stu[n].chinese<<setw(10)<<stu[n].english<<setw(8)<<stu[n].sum<<endl;}}break; default:cout<<"输入有误,请重新操作!"<<endl;}cout<<"若需继续查找请输入1,否则输入0!"<<endl;cin>>t;}while(t==1);}


遍历函数:

void Printlist(){for(int m=0;m<length;m++){for(int n=0;n<length;n++){if(stu[n].sum<stu[n+1].sum){ Student s;s = stu[n];stu[n] = stu[n+1];stu[n+1] = s;}}}    cout<<setw(4)<<"序号"<<setw(10)<<"姓名"<<setw(8)<<"学号"<<setw(10)<<"语文成绩"<<setw(10)<<"英语成绩"<<setw(8)<<"总分"<<endl;for(int i=0;i<length;i++){cout<<setw(4)<<i+1<<setw(10)<<stu[i].name<<setw(8)<<stu[i].number<<setw(10)<<stu[i].chinese<<setw(10)<<stu[i].english<<setw(8)<<stu[i].sum<<endl;}}

主函数:

void main(){//第一次录入数据Insert("张三",01,85,95);    Insert("里斯",02,75,85);    Insert("王果",03,86,87);    Insert("范德萨",04,93,96);    Insert("郭芙蓉",05,84,82);Printlist();cout<<setw(1)<<endl;    //添加数据    Insert("温热",06,85,79);Printlist();cout<<setw(1)<<endl;    //修改数据Change();cout<<setw(1)<<endl;    //按照名字和学号查找Printlist();cout<<setw(1)<<endl;Locate();cout<<setw(1)<<endl;//按照位置查找Get(3);cout<<setw(1)<<endl;//删除数据Delete(3);cout<<setw(1)<<endl;Printlist();}

3、实验截图:


第一次录入数据:



添加数据:



修改数据:



按照名字和学号查找:



按照位置查找:



删除数据:








阅读全文
0 0
原创粉丝点击