数据结构顺序表插入 删除 按值查找,详细注释,希望帮到你

#include <stdio.h>
//顺序表初始化,插入及删除操作实战
#define MAXSIZE 100
typedef  int Element;//让顺序表存储其他类型的数据时,可修改int 从而达到快速修改数据类型的目的。
typedef  struct{
    Element date[MAXSIZE];
    int length;
}Seqlist;
bool list_insert(Seqlist &L,int pos,Element x){//pos代表要插入的位置 因为插入和删除动作都要涉及到修改顺序表,因此我们需要用到引用。
    if(pos<1||pos>L.length+1){//判断出拆入的位置是都合法,不能是第一个之前,已不能是第n+1个之后
        return false;//如果走到这里,一遇到 return 函数就会结束,因此如果是return false函数就不会再往下执行
    }
    //判断我的表有没有满
    if(L.length>=MAXSIZE){
        return false;
    }

    for(int j=L.length;j>=pos;j--){
        L.date[j]=L.date[j-1];//插入操作,就是从第i个位置的起,所有的数全部往后以一个单位。
    }
    L.date[pos-1]=x;//将数组中的值移完之后,进行插入的动作

    L.length++;//顺序表的长度要加一
    return true;//bool类型的函数需要返回是ture 或false

}
void print_list(Seqlist L){
    for(int i=0;i<L.length;i++){
        printf("%3d",L.date[i]);
    }
    printf("\n");
}
//顺序表删除操作,pos代表我们要删除的第pos个位置,x是我们要删除的数
bool list_delete(Seqlist &L,int pos,Element &x){//删除操作,只需判断我要删除的数据位置合不合法,有没有在我的length之内就好
    if(pos<1||pos>L.length){
         return false;
    }
    x=L.date[pos-1];//用一个x变量来接收我们要删除的那个数,因为我们要在子函数中修改x的值,所以我们可以看到函数调用中形参加了引用
    for (int j=pos-1;j<L.length-1;j++){//这里对j的初始化 可以是pos也可以是pos-1 破碎带表弟几个位值,pos-1代表要删除的数在数组中的下标
        L.date[j]=L.date[j+1];
    }

    L.length--;//这里很重要,记得长度要减一,要不然打印的时候,我们会把表尾打印两次
    return true;
}
int locate_list(Seqlist L,Element x){//这是一个很简单的按值查找,查找的时候我我们不需要对顺序表中的数进行修改,因此我们不需要进行引用
    for(int i=0;i<L.length;i++){
        if(L.date[i]==x){
            return i+1;//下表从零开始,因此我们要返回i+1。
        }
    }
    return 0;//循环结束没找到,返回零。
}
int main() {
    Seqlist  L;
    Element x=0;
    bool ret;
    int rst;
    L.date[0]=0;
    L.date[1]=1;
    L.date[2]=2;
    L.length=3;
    ret=list_insert(L,3,60);
    if(ret){
        printf("insert sucessful\n");//clion 不可以用中文
    }
    else{
        printf("insert failed\n");
    }
    print_list(L);
    ret=list_delete(L,3,x);

    if(ret){
        printf("delete sucessful\n");
        printf("deleted number=%d\n",x);
        print_list(L);
    }else{
        printf("delete false\n");
    }

    rst=locate_list(L,60);
    if(rst){
        printf("locate successful");
    }else{
        printf("locate failed");
    }
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值