Fork me on GitHub

线性表的基本操作(插入,删除,查找)

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

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

老师提出的要求如下:

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\n",L->elem[i].num,L->elem[i].name);
    }
    denglu(L);
}
void GetData(Seqlist *L)//按值查找
{
    system("CLS");
    int num1;
    printf("请输入想要查找的序号号码\n");
    scanf("%d",&num1);
    if((num1-1)<0||(num1-1)>L->last){
        printf("输入有误请重新输入\n");
        GetData(L);
    }
    for(int i=0;i<=L->last;i++){
        if(num1-1==i){
            printf("%d %s\n",L->elem[i].num,L->elem[i].name);
            denglu(L);
        }
    }
}
void Locate(Seqlist *L)//按内容查找
{
    system("CLS");
    char name[10];
    printf("请输入你要查找的学生姓名\n");
    scanf("%s",name);
    for(int j=0;j<=L->last;j++){
        if(strcmp(name,L->elem[j].name)==0){
            printf("%d %s\n",L->elem[j].num,L->elem[j].name);
            denglu(L);
        }
    }
    printf("没有找到此学生\n");
    chazhao(L);

}
void InsList(Seqlist *L)//插入
{
    system("CLS");
    int k;
    int i;
    printf("请输入要插入到的数据的位置\n");
    scanf("%d",&i);
    if((i<1)||(i>L->last+2)){
        printf("插入位置i值不合法\n");
        denglu(L);
    }
    if(L->last>=MAXSIZE-1){
        printf("表已满,无法插入\n");
        denglu(L);
    }
    printf("请输入要插入的学号及姓名\n");
    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("插入成功!\n");
    denglu(L);
}
void DelList(Seqlist *L)//删除
{
    system("CLS");
    int k;
    int i;
    printf("请输入要删除的数据的编号\n");
    scanf("%d",&i);
    if((i<1)||(i>L->last+1)){
        printf("删除位置不合法!\n");
        denglu(L);
    }
    for(k=i;k<=L->last;k++){
        L->elem[k-1]=L->elem[k];
    }
    L->last--;
    printf("删除成功!\n");
    denglu(L);
}
void chazhao(Seqlist *L)
{
    printf("1.按序号查找\n");
    printf("2.按内容查找\n");
    printf("3.返回主界面\n");
    int aa;
    scanf("%d",&aa);
    switch(aa){
        case 1:GetData(L);
        case 2:Locate(L);
        case 3:denglu(L);
        default:
                 printf("输入错误请重新输入\n");
                 chazhao(L);
    }
}

void denglu(Seqlist *L)
{
    int a;
    printf("请选择你要做什么\n");
    printf("1.查找\n");
    printf("2.插入\n");
    printf("3.删除\n");
    printf("4.打印现有的学生信息\n");
    printf("5.退出\n");
    scanf("%d",&a);
    switch(a){
        case 1:chazhao(L);
        case 2:InsList(L);
        case 3:DelList(L);
        case 4:Print(L);
        case 5:printf("谢谢使用\n");exit(0);
        default:
                 printf("输入错误请重新输入\n");
                 denglu(L);
    }
}


int main()
{
    Seqlist L;
    printf("input the lase index of students:\n");
    scanf("%d",&L.last);
    for(int i=0;i<=L.last;i++){
        scanf("%d %s",&L.elem[i].num,L.elem[i].name);
    }
    printf("输入成功!\n");
    denglu(&L);

    return 0;
}

 

posted @ 2016-09-20 13:54  Jinkelababy  阅读(3094)  评论(0编辑  收藏  举报