• C语言实现对顺序表的增删改查


    C语言实现对顺序表的增删改查


    顺序表的概念

    • 采用顺序储存结构的线性表称为顺序表,他的数据元素按照逻辑顺序依次有放在一组连续的储存单元之中。逻辑上相邻的数据元素,其储存位置也彼此相邻

    顺序表的主要算法

    (1).在表中第i个位置插入新元素x

    • 第一步,判断插入位置的合理性以及表是否已满;
    • 第二步,从最后一个元素开始依次向前,将每个元素向后移动一个位置,直到第i个元素位置;
    • 第三步,向空出的第i个位置存入新元素x;
    • 第四步,最后还要将线性表长度加1;
      代码如下:
    int Insert(int line[],int num,int length,int place){
        if(num<1||num>length+1){
            return -1;
        }else{
            int j;
            for(j=length-1;j>=place-1;j--){
                line[j+1]=line[j];
            }
            line[place-1]=num;
            return 1;
        }
    }

    (2).在表中删除第i个元素
    - 第一步,判断删除位置的合理性;
    - 第二步,从第i+1个元素开始,依次向后直到最后一个元素为止,将每个元素向前移动一个位置,这是第i个元素已经被删除覆盖;
    - 第三步,最后还要将线性表长度减1;
    代码如下:

    int Delete(int line[],int num,int length){
        if(num<0||num>length){
            return 2;
        }else{
            int j;
            for(j=num;j<=length-1;j++){
                line[j-1]=line[j];
            }
            return 1;
        }
    }

    (3).在表中查找某个元素

    • 查找元素的情况相较于前面的算法来说相对要复杂一些。如果数据元素是整数、实数这些基本数据类型,那么查找元素时自然就是与数据元素本身进行对比。如果数据元素是包含多个属性的结构体或者对象,那么查找元素往往是与数据元素的某个属性比较。接下来演示的是相对的数据元素的直接比较的情况。
      代码如下
    int Search(int line[],int num,int length){
        int i;
        for(i=0;i<=length;i++){
            if(line[i]==num){
                return i;
            }
        }
        return -1;
    }

    接下来贴出完整的示例代码:

    #include <stdio.h>
    #include <stdlib.h>
    #define N 30
    int Search(int line[],int num,int length);//传入数组,需要查找的元素,数组长度,
    int Delete(int line[],int num,int length);//传入数组,需要删除的元素位置,数组长度
    int Insert(int line[],int num,int length,int place);//传入数组,需要插入的数值,数组长度,插入位置
    int Alter(int line[],int num,int length,int place);//传入数组,需要修改为的值,数组长度,修改的位置
    void ReadLine(int line[],int length);//读取输入
    void PrintLine(int line[],int length);//打印数组
    int main()
    {
        int n,m,num;
        int line[N];
        int length,place;
        while(1){
            printf("你需要执行的功能:
    1:删除一个元素
    2.查找一个元素
    3.输入数组元素
    4.查看数组元素
    5.插入一个元素
    6.修改数组中的元素
    ");
            scanf("%d",&n);
            switch(n){
                case 1:
                    printf("输入你需要删除的元素坐标
    ");
                    scanf("%d",&num);
                    printf("
    ");
                    m=Delete(line,num,length);
                    if(m!=2){
                        printf("success
    ");
                        length=length-1;
                    }else{
                        printf("false
    ");
                    }
                    break;
                case 2:
                    printf("输入需要查找的元素
    ");
                    scanf("%d",&num);
                    m=Search(line,num,length);
                    if(m<0){
                        printf("false!",m);
                    }else{
                        printf("%d
    ",m);
                    }
                    break;
                case 3:
                    printf("输入数组长度
    ");
                    scanf("%d",&length);
                    ReadLine(line,length);
                    break;
                case 4:
                    PrintLine(line,length);
                    break;
                case 5:
                    printf("输入您需要插入的位置
    ");
                    scanf("%d",&place);
                    printf("输入您需要在该位置插入的元素");
                    scanf("%d",&num);
                    m=Insert(line,num,length,place);
                    if(m>=0){
                        printf("插入成功
    ");
                    }else{
                        printf("插入失败
    ");
                    }
                    length=length+1;
                    break;
                case 6:
                    printf("输入你需要修改的元素位置
    ");
                    scanf("%d",&place);
                    printf("输入用来替换该位置的元素
    ");
                    scanf("%d",&num);
                    m=Alter(line,num,length,place);
                    if(m>=0){
                        printf("修改成功
    ");
                    }else{
                        printf("修改失败
    ");
                    }
                    break;
                default:
                    printf("输入错误,请重启程序!
    ");
                    return 0;
    
            }
        }
    }
    int Alter(int line[],int num,int length,int place){
        if(num<1||num>length+1){
            return -1;
        }else{
            line[place]=num;
            return 1;
        }
    }
    int Delete(int line[],int num,int length){
        if(num<0||num>length){
            return 2;
        }else{
            int j;
            for(j=num;j<=length-1;j++){
                line[j-1]=line[j];
            }
            return 1;
        }
    }
    int Insert(int line[],int num,int length,int place){
        if(num<1||num>length+1){
            return -1;
        }else{
            int j;
            for(j=length-1;j>=place-1;j--){
                line[j+1]=line[j];
            }
            line[place-1]=num;
            return 1;
        }
    }
    void ReadLine(int line[],int length){
        int i;
        for(i=0;i<length;i++){
            printf("输入数组元素
    ");
            scanf("%d",&line[i]);
        }
    
    }
    int Search(int line[],int num,int length){
        int i;
        for(i=0;i<=length;i++){
            if(line[i]==num){
                return i;
            }
        }
        return -1;
    }
    void PrintLine(int line[],int length){
        int i;
        if(length>=N){
            printf("没有数组,请创建数组
    ");
        }else{
            for(i=0;i<length;i++){
                printf("%3d",line[i]);
            }
            printf("
    ");
        }
    
    }
    
    博客园:https://www.cnblogs.com/newtol 微信公众号:Newtol 【转发请务必保留原作者,否则保留追责权利】
  • 相关阅读:
    smobiler仿京东app搜索页面
    搜索界面设计
    smobiler仿饿了么app筛选页面
    Smobiler低功耗蓝牙连接的过程和参数的含义
    smobiler仿饿了么app搜索页面
    内存分配的几个函数的简单对比分析
    Android仿IOS选择拍照相册底部弹出框
    正则表达式 : 6~16位字符,至少包含数字.字母.符号中的2种
    android 音量键调节无效问题
    windows查看系统过期时间
  • 原文地址:https://www.cnblogs.com/newtol/p/10159132.html
Copyright © 2020-2023  润新知