zoukankan      html  css  js  c++  java
  • 线性表的基本操作(插入,删除,查找)

                学到的东西就要多看多记。所以我觉得还是应该把自己做过的东西传上来。方便自己的二次学习。

                这个程序主要用的是顺序表的操作。没有用链表。

    老师提出的要求如下:

    1.给出顺序表的存储结构定义。

    2.完成顺序表的基本操作函数。

                1)      初始化顺序表

                2)      分别完成以下两种情况建立顺序表:设给定的数据元素存放在一维数组中;将数据元素从键盘依次输入

                3)      输出顺序表的长度

                4)      实现按位查找和按值查找

                5)      实现插入和删除操作

                6)      实现判空和遍历操作

    3.编写主函数、各功能函数,实现基本操作,并设置测试数据,测试合法和非法数据的输出结果。

    4.程序调试运行并保存输出结果。

    5.准备测试数据并准备验收。

    代码如下:

    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #define MAXSIZE 100
    
    //查找1.内容2.序号
    //插入
    //删除
    typedef struct student
    {
        int num;
        char name[10];
    
    }STU;
    typedef struct list
    {
        STU elem[MAXSIZE];
        int last;//最后的下标
    
    }Seqlist;
    void denglu(Seqlist *L);//登录函数
    void chazhao(Seqlist *L);//查找函数
    void GetData(Seqlist *L);//按值查找
    void Locate(Seqlist *L);//按内容查找
    void Print(Seqlist *L);//输出函数
    void InsList(Seqlist *L);//插入
    
    void Print(Seqlist *L)//输出函数
    {
        system("CLS");
        for(int i=0;i<=L->last;i++){
            printf("%d %s
    ",L->elem[i].num,L->elem[i].name);
        }
        denglu(L);
    }
    void GetData(Seqlist *L)//按值查找
    {
        system("CLS");
        int num1;
        printf("请输入想要查找的序号号码
    ");
        scanf("%d",&num1);
        if((num1-1)<0||(num1-1)>L->last){
            printf("输入有误请重新输入
    ");
            GetData(L);
        }
        for(int i=0;i<=L->last;i++){
            if(num1-1==i){
                printf("%d %s
    ",L->elem[i].num,L->elem[i].name);
                denglu(L);
            }
        }
    }
    void Locate(Seqlist *L)//按内容查找
    {
        system("CLS");
        char name[10];
        printf("请输入你要查找的学生姓名
    ");
        scanf("%s",name);
        for(int j=0;j<=L->last;j++){
            if(strcmp(name,L->elem[j].name)==0){
                printf("%d %s
    ",L->elem[j].num,L->elem[j].name);
                denglu(L);
            }
        }
        printf("没有找到此学生
    ");
        chazhao(L);
    
    }
    void InsList(Seqlist *L)//插入
    {
        system("CLS");
        int k;
        int i;
        printf("请输入要插入到的数据的位置
    ");
        scanf("%d",&i);
        if((i<1)||(i>L->last+2)){
            printf("插入位置i值不合法
    ");
            denglu(L);
        }
        if(L->last>=MAXSIZE-1){
            printf("表已满,无法插入
    ");
            denglu(L);
        }
        printf("请输入要插入的学号及姓名
    ");
        char name[10];
        int ll;
        scanf("%d",&ll);
        scanf("%s",name);
        for(k=L->last;k>=i-1;k--)
            L->elem[k+1]=L->elem[k];
        L->elem[i-1].num=ll;
        strcpy(L->elem[i-1].name,name);
        printf("插入成功!
    ");
        denglu(L);
    }
    void DelList(Seqlist *L)//删除
    {
        system("CLS");
        int k;
        int i;
        printf("请输入要删除的数据的编号
    ");
        scanf("%d",&i);
        if((i<1)||(i>L->last+1)){
            printf("删除位置不合法!
    ");
            denglu(L);
        }
        for(k=i;k<=L->last;k++){
            L->elem[k-1]=L->elem[k];
        }
        L->last--;
        printf("删除成功!
    ");
        denglu(L);
    }
    void chazhao(Seqlist *L)
    {
        printf("1.按序号查找
    ");
        printf("2.按内容查找
    ");
        printf("3.返回主界面
    ");
        int aa;
        scanf("%d",&aa);
        switch(aa){
            case 1:GetData(L);
            case 2:Locate(L);
            case 3:denglu(L);
            default:
                     printf("输入错误请重新输入
    ");
                     chazhao(L);
        }
    }
    
    void denglu(Seqlist *L)
    {
        int a;
        printf("请选择你要做什么
    ");
        printf("1.查找
    ");
        printf("2.插入
    ");
        printf("3.删除
    ");
        printf("4.打印现有的学生信息
    ");
        printf("5.退出
    ");
        scanf("%d",&a);
        switch(a){
            case 1:chazhao(L);
            case 2:InsList(L);
            case 3:DelList(L);
            case 4:Print(L);
            case 5:printf("谢谢使用
    ");exit(0);
            default:
                     printf("输入错误请重新输入
    ");
                     denglu(L);
        }
    }
    
    
    int main()
    {
        Seqlist L;
        printf("input the lase index of students:
    ");
        scanf("%d",&L.last);
        for(int i=0;i<=L.last;i++){
            scanf("%d %s",&L.elem[i].num,L.elem[i].name);
        }
        printf("输入成功!
    ");
        denglu(&L);
    
        return 0;
    }
  • 相关阅读:
    归并排序
    mysql 基本查询
    APP版本升级
    top命令详解
    iptables原理详解
    Linux--iptables常用命令
    iptables语法常用命令总结(表格)
    iptables原理--图示理解
    GIT的Windows客户端使用
    Linux下GIT服务器端和客户端搭建
  • 原文地址:https://www.cnblogs.com/xzt6/p/5888567.html
Copyright © 2011-2022 走看看