我是靠谱客的博主 甜美御姐,最近开发中收集的这篇文章主要介绍数据结构第一次上机实验报告一.实验目的:二.实验环境三.上机内容四.上机调试流程图 五.测试结果六.实验总结七.代码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一.实验目的:

  1.掌握c++调试线性表的基本操作方法。

  2.掌握顺式与链式线性表的基本操作:插入,删除,查找等等。

  3.如何改进程序的健壮性如何做到界面友好。

二.实验环境

   vscode,g++编译器。

三.上机内容

   定义一个包含学生信息的顺式表和链式表,使其具有如下功能:

  1. 指定学生个数,输入学生信息。
  2. 显示列表中所有学生的学生信息。
  3. 根据名字查询学生学号与成绩。。
  4. 根据列表顺序来查找学生信息。
  5. 给定一个学生信息,插入到表中指定的位置。
  6. 删除指定学生的学生记录。
  7. 统计表中个数。

四.上机调试流程图

链式顺序表中根据姓名查找的算法流程图:

启动程序,然后输入姓名a。在列表中判断有没有name==a,如果有则输出学生信息。没有则输出没有这名学生。

fa478d154c9444ac84157e66295d8555.png

 链式顺序表中插入算法的流程图:

程序开始,输入插入位置a和数据x。先判断插入位置a是否合法,再将第a-1个节点指针域指向x,x的指针域指向原来的第a个节点。

 f9b4f9cb143f465992411b2018004630.png

 五.测试结果

1.启动程序,检测创建列表功能。

按照菜单提示,先输入1。

继续根据提示输入数据 1 a 1

                                   3 c 3

结果创建列表成功。

========开始========
菜单:
创建列表请按1.
输出列表请按2.
插入数据请按3.
删除数据请按4.
姓名查找请按5.
顺序查找请按6.
列表长度请按7.
结束程序请按8.
请选择下一操作:
1
输入学生人数2
输入学号,姓名,成绩1 a 1
输入学号,姓名,成绩3 c 3
创建列表成功!!!
请选择下一操作:

 2.检测插入数据功能。按3选择插入数据功能,插入数据2 b 2到第二个数据单元,在输入2查看线性表。结果如下,成功将数据2 b 2插入到列表第二个数据单元。

3
分别输入插入的位置,学号,姓名与分数:
2 2 b 2
请选择下一操作:
2
1 a 1
2 b 2
3 c 3
请选择下一操作:

3.检测两种查询功能。输入5,按照名字查询学号和成绩。输入6,按照序号查学生信息。结果如下,查询功能都成功运行。 

5
输入待查找的名字:b
学号:2
成绩:2
请选择下一操作:
6
请输入学生序号:
1
学号:1 姓名:a 分数:1
请选择下一操作:

4 检测删除功能。

先输入7查询列表长度,按2查看链表。

然后输入4,删除第二个数据单元,再查看长度与链表。

结果如下,成功删除了第二个数据单元,列表长度减一,查看列表中第二个数据元素被删除。

7
列表的长度:3
请选择下一操作:
2
1 a 1
2 b 2
3 c 3
请选择下一操作:
4
请输入删除的排序1
请选择下一操作:
7
列表的长度:2
请选择下一操作:
2
1 a 1
3 c 3
请选择下一操作:

 最后输入0,程序结束。

六.实验总结

在此次实验中,我学习到了如何改进程序的界面友好性,加强程序的健壮性。查询资料反复调试后,逐步改进了程序,学会了运用c➕➕语言来成功创建了顺式表和链式表,受益匪浅。

七.代码

顺式表代码如下

#include<stdio.h>
#include<iostream>
#include <string.h>
#include <string>
using namespace std;
//数组的最大长度
#define OK 1
#define error 0
#define MAX 10
//OK和error代表函数状态,分别为1(函数成功运行),0(函数出错)
typedef int Status;
//Status是函数类型,其值是函数结果状态代码,如OK代表成功,error代表出错。
//ElemType代表数组类型,根据实际情况确定,这里假设为int型

typedef struct 
{
    char name[20];
    char id[8];
    int score;
}Student;

typedef struct{
    Student *elem;
	int length;
}SqList; 

Status InitList(SqList &L)
{
    L.elem=new Student [MAX];
    L.length=0;
    return OK;
}
Status InputList(SqList &L){
    cout<<"输入学生人数";
    cin>>L.length;
    if (L.length>MAX||L.length<0) exit(error);
    for(int i=0;i<L.length;i++){
        cout<<"输入学号,姓名,成绩";
        cin>>L.elem[i].id>>L.elem[i].name>>L.elem[i].score;
    }
    cout<<"创建列表成功!!!n";
    return OK;
}
Status OutList(SqList &L){
    for(int i=0;i<L.length;i++){
        cout<<L.elem[i].id<<" "<<L.elem[i].name<<" "<<L.elem[i].score<<endl;
    }
    return OK;
}
Status GetElem(SqList L)
{
    char name[20];
    cout<<"输入待查找的名字:";
    cin>>name;
    int j=0;
    for(int i=0;i<L.length;i++)
    {
        if(strcmp(name,L.elem[i].name)==0)
            {cout<<"学号:"<< L.elem[i].id<<"n成绩:"<<L.elem[i].score<<endl;}
        else j++;
    }
    if (j==L.length)
        cout<<"没有这个人的名字";
    return 0;
}
Status GetElem_2(SqList L)
{
    cout<<"请输入学生序号:n";
    int i;
    cin>>i;
    while (i<0||i>L.length) {
        cout<<"请输入合法的学生序号:n";
        cin>>i;
    }
    i=i-1;
    cout<<"学号:"<<L.elem[i].id<<" 姓名:"<< L.elem[i].name<<" 分数:"<<L.elem[i].score<<endl;
    return OK;
}
Status ListInsert(SqList &L)
{
    int i;
    char name[20];
    char id[8];
    int score;
    cout<<"分别输入插入的位置,学号,姓名与分数:n";
    cin>>i>>id>>name>>score;
    if (i<0||i>L.length+1) return error;
    if (L.length==MAX) return error;
    for (int j=L.length;j>=i-1;j--)
    {
        L.elem[j+1]=L.elem[j];
    }
    strcpy(L.elem[i-1].name,name);
    strcpy (L.elem[i-1].id,id);
    L.elem[i-1].score=score;
    ++L.length;
    return OK;
}
Status ListDelete(SqList &L)
{
    int i;
    cout<<"请输入删除的排序";
    cin>>i;
    if (i<0||i>L.length)
    {
        return error;
    }
    for (int j=L.length-1;j>i;j--)
    {
        L.elem[j-1]=L.elem[j];
    }
    --L.length;
    return OK;
}
Status ListStastic(SqList &L){
    cout<<"列表的长度:"<< L.length<<endl;
    return 0;
}
int main()
{
    SqList List;
    InitList (List);
    cout<<"========开始========n";
    cout<<"菜单:n";
    int a;
    cout<<"创建列表请按1.n";
    cout<<"输出列表请按2.n";
    cout<<"插入数据请按3.n";
    cout<<"删除数据请按4.n";
    cout<<"姓名查找请按5.n";
    cout<<"顺序查找请按6.n";
    cout<<"列表长度请按7.n";
    cout<<"结束程序请按8.n";
    while(1)
        {
        cout<<"请选择下一操作:n";
        
        cin>>a;    
        switch (a)
        {
        case 0:
            cout<<"========结束========";
            return 0;
        case 1:
            InputList(List);
            break;
        case 2:
            OutList(List);
            break;
        case 3:
            ListInsert(List);
            break;
        case 4:
            ListDelete(List);
            break;
        case 5:
            GetElem(List);
            break;
        case 6:
            GetElem_2(List);
            break;
        case 7:
            ListStastic(List);
            break;
        }}
    return 0;
}

链式表代码如下:

#include <iostream>
#include <string>
#include <string.h>
#define OK 0
#define error -1
using namespace std;
typedef int Status;
typedef struct 
{
    char name[8];
    char id[8];
    float score;
}Student;
typedef struct LNode{
    Student data; 
    struct LNode *next;
}LNode,*LinkList;
Status InitList(LinkList &L){
    L=new LNode;
    L->next=NULL;
    return OK;
}
Status InputList(LinkList &L){
    int num;
    cout<<"请输入学生个数:n";
    cin>>num;
    L=new LNode;
    L->data.score=num;
    L->next=NULL;
    LNode *r=L;
    for (int i=0;i<num;i++){
        cout<<"分别输入学号,姓名,分数:n";
        LNode *p=new LNode;

        cin>>p->data.id>>p->data.name>>p->data.score;
        p->next=NULL;
        r->next=p;
        r=p;
        }
    return OK;
}
Status OutputList(LinkList &L){
    LNode*p=L->next;
    int a =L->data.score;
    for (int i=0;i<a;i++)
        {cout<<"学号:"<<p->data.id<<" 姓名:"<<p->data.name<<" 成绩:"<<p->data.score<<endl;p=p->next;}
    return OK;
}
Status GetList(LinkList &L){
    char name[20];
    cout<<"请输入查询的姓名n";
    cin>>name;
    LNode*p=L->next;
    int a=L->data.score;
    int j=0;
    for (int i=0;i<a;i++){
        if (strcmp((p->data).name,name)==0)
           { cout<<"学号为:"<<p->data.id<<"n分数为:"<<p->data.score<<endl;}
        else j++;
        p=p->next;
    }
    if (j==a)
        cout<<"查无此人";
        return OK; 
}
Status GetList_2(LinkList &L){
    int i;
    cout<<"请输入序号";
    cin>>i;
    if (i<0||i>L->data.score) {
        cout<<"请输入合法的学生序号n";
        exit (error);
    }
    LNode*p=L->next;
    for (int j=0;j<i-1;j++)
        p=p->next;
    cout<<"学号:"<<p->data.id<<" 姓名:"<< p->data.name<<" 分数:"<<p->data.score<<endl;
    return 0;
}
Status InsertList(LinkList &L){
    int i,j;
    char name[20];
    char id[8];
    int score;
    cout<<"分别输入插入的位置,学号,姓名与分数n";
    cin>>i>>id>>name>>score;
    LNode*p=L;j=0;
    while((p->next)&&(j<i-1))
        {p=p->next;j++;}
    if (!p||j>i-1) return error;
    LNode *s;
    s=new LNode;
    strcpy(s->data.id,id);
    s->data.score=score;
    strcpy(s->data.name,name);
    s->next=p->next;
    p->next=s;
    L->data.score++;
    return OK;
}
Status DeleteList(LinkList &L){
    cout<<"输入需删除的序号:";
    int i,j;
    cin>>i;
    LNode *p=L;j=0;
    while((p->next)&&(j<i-1))
        {p=p->next;++j;}
    if (!p||j>i+1) return error;
    LNode *q;
    q=p->next;
    p->next=q->next;
    delete q;
    L->data.score--;
    return OK;
}
Status ListStastic(LinkList &L){
    cout<<"长度为:"<<L->data.score<<endl;
    return OK;
}
int main()
{
    LinkList List;
    int a;
    cout<<"请选择一下操作n";
    cout<<"创建列表请按1.n";
    cout<<"输出列表请按2.n";
    cout<<"插入数据请按3.n";
    cout<<"删除数据请按4.n";
    cout<<"姓名查找请按5.n";
    cout<<"顺序查找请按6.n";
    cout<<"列表长度请按7.n";
    cout<<"结束程序请按8.n";
   while(1)
        {
        cout<<"请选择一下操作n";
        cin>>a;    
        switch (a)
        {
        case 0:
            cout<<"========结束========";
        case 1:
            InputList(List);
            break;
        case 2:
            OutputList(List);
            break;
        case 3:
            InsertList(List);
            break;
        case 4:
            DeleteList(List);
            break;
        case 5:
            GetList(List);
            break;
        case 6:
            GetList_2(List);
            break;
        case 7:
            ListStastic(List);
            break;
        }}
}

最后

以上就是甜美御姐为你收集整理的数据结构第一次上机实验报告一.实验目的:二.实验环境三.上机内容四.上机调试流程图 五.测试结果六.实验总结七.代码的全部内容,希望文章能够帮你解决数据结构第一次上机实验报告一.实验目的:二.实验环境三.上机内容四.上机调试流程图 五.测试结果六.实验总结七.代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部