数据结构 实验一 顺序表的基本操作

09
Apr

数据结构 实验一 顺序表的基本操作

一、实验名称:顺序表的基本操作

二、实验目的:

1、掌握顺序表的定义;
2、掌握顺序表的基本操作,如建立、查找、插入和删除等。

三、实验原理:

四、实验仪器:Devc++

五、实验内容与步骤:

定义一个包含学生信息(学号,姓名,成绩)的的顺序表,使其具有如下功能:
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
(3) 根据姓名进行查找,返回此学生的学号和成绩;
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
(5) 给定一个学生信息,插入到表中指定的位置;
(6) 删除指定位置的学生记录;
(7) 统计表中学生个数。

六、代码如下

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
#define OVERFLOW -2
#define OK 1
typedef int Status;
int os=0;
typedef struct
{
    char no[8];
    char name[20];
    int score;
}Student;

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

Status InitList(SqList * L){
    int i;//循环变量 
    L->elem = new Student[MAXSIZE];
    if(!L->elem) exit(OVERFLOW);
    L->length = 0;
    printf("请输入学生人数:");
    scanf("%d",&L->length);
    printf("请输入学生信息:学号 姓名 成绩\n");
    for(i=0;ilength;i++){
        scanf("%s %s %d",L->elem[i].no,L->elem[i].name,&L->elem[i].score);    
        os++;
    }
    return OK;
}

Status A(SqList *L){//创建学生 
    int i;
    for(i=0;ilength;i++)
        if(strcmp("\0",L->elem[i].name)!=0) 
            printf("%s %s %d\n",L->elem[i].no,L->elem[i].name,L->elem[i].score);
        else
            printf("表内无数据,请先创建学生!\n"); 
}
Status B(SqList *L,char a[]){//列出学生信息 
    int i;
    for(i=0;ilength;i++)
        if(strcmp(a,L->elem[i].name)==0)
            printf("%s %s %d\n",L->elem[i].no,L->elem[i].name,L->elem[i].score);
//ilength if(strcmp(a,L->elem[i].name)==0)) 
/*
101 李 100
102 张 200
*/
}

Status C(SqList *L,int i){//查找学生 
    if(strcmp("\0",L->elem[i].name)!=0) 
        printf("%s %s %d\n",L->elem[i].no,L->elem[i].name,L->elem[i].score);
    else
        printf("查无此人\n");
}

Status D(SqList *L){//添加学生 
    int a,i; 
    printf("请输入要添加的学生数量:");
    scanf("%d",&a);
    printf("请输入学生信息:学号 姓名 成绩\n");
    for(i=0;ielem[L->length].no,L->elem[L->length].name,&L->elem[L->length].score);    
        ++L->length;
    }
}

int Del(SqList *L,int i){//删除学生 
    if ((i<1)||(i>L->length)) exit; 
    for(;ilength-1;i++)
        L->elem[i]=L->elem[i+1];
    --L->length;
    printf("删除完毕\n");
}

Status E(SqList *L){
    int choice,i;
    char a[8]; 
    printf("请选择删除的方式:\n1.按学号删除\n2.按姓名删除\n");
    scanf("%d",&choice);
    switch(choice){
        case 1:
            printf("请输入要删除的学号:"); 
            scanf("%s",&a);
            for(i=0;ilength;i++) 
                if(strcmp(L->elem[i].no,a)==0){
                    printf("删除:%d\n",i); 
                    Del(L,i);
                    }
            break;
        case 2:
            printf("请输入要删除的姓名:"); 
            scanf("%s",&a);
            for(i=0;ilength;i++) 
                if(strcmp(a,L->elem[i].name)==0){
                    printf("删除:%d\n",i); 
                    Del(L,i);
                }
                else printf("0");
            break;
/*        case 3://按编号删除 
            printf("请输入要删除的编号:"); 
            scanf("%s",&a);
            Del(L,i);
            break;*/
        default:
            break;
    }
}



void Menu(void)
{
    printf("----顺序表------\n");
    printf("1 创建学生信息\n");
    printf("2 显示学生信息\n");
    printf("3 按姓名查询\n");
    printf("4 按位置查找\n");
    printf("5 添加\n");
    printf("6 删除\n");
    printf("0 退出\n");
}

int main()
{
    int choice,i;
    char a[20]; 
    SqList list;
    Menu();
    while(1)
    {
        printf("请选择菜单: ");
        scanf("%d",&choice);
        if(os==0&&choice!=1) 
            printf("请先添加学生!\n"); 
        else
        switch(choice){
            case 1:
                InitList(&list);
                break;
            case 2:
                A(&list);
                break;
            case 3:
                printf("请输入姓名:");
                scanf("%s",&a);
                B(&list,a);
                break;
            case 4:
                printf("请输入位置:");
                scanf("%d",&i);
                C(&list,i);
                break;
            case 5:
                D(&list);
                break;
            case 6:
                E(&list);
                break;
            default:
                break;
        }
        if(choice == 0)
        {
            break;
        }
    }
    return 0;
}

添加新评论