首页 > 其他分享 >线性表基本操作物理实现

线性表基本操作物理实现

时间:2024-04-05 20:31:23浏览次数:34  
标签:return 线性表 删除 int pos len 基本操作 data 物理

#include <stdio.h>
//顺序表的初始化及插入操作实战

#define MaxSize 50
typedef int ElemType;//为什么这样设计,一旦用这种方式下面写代码,方便后续顺序表存储的不是整形方便修改,统一修改
typedef struct{
    ElemType data[MaxSize];
    int len;//顺序表长度
}Sqlist;

//顺序表的插入,因为顺序表L会改变,因此我们呢这里用引用
bool ListInsert(Sqlist &L,int pos,ElemType elem)//elem 没有加取地址&符,因为elem这里只从外面读
{
    //判断pos是否合法
    if(pos < 1 || pos > L.len+1){
        return false;//插入失败
    }
    //如果存储空间满了就不能插入
    if(L.len==MaxSize){
        return false;//插入失败
    }
    //把后面的元素依次往后移动,放出位置
    for(int j=L.len;j>=pos;j--){
        L.data[j]=L.data[j-1];
    }
    L.data[pos-1]=elem;//在该位置上放入值
    L.len++;//表长度当然会加一了
    return true;//插入成功
}
//删除顺序表中的元素,顺序表L同样会改变,pos要删除元素的位置,e获取被删除元素的值
bool ListDelete(Sqlist &L,int pos,ElemType &e){//这里为什么e加&符号,因为e会改变,和插入不同
    //判断删除的位置是否合法,那为什么操作的下标不是从0开始,要从1开始?
    if(pos <1 || pos >L.len){
        return false;//这里return返回的话,直接提前结束了
    }
    e=L.data[pos-1];//因为是通过下标来删除某个值,这里把删掉的值给e保存,然后再传给del这个实参
    //这里取下标,删除某个值,就好比我所要删除的东西,并不是直接的,而是通过线性表间接删除,怎么理解,
    // 我要取出这个东西,拿走是ctrl+c 而不是通过 ctrl+x 弄过来的,意思原路径还存在,是通过强制手段,
    // 比如删除第四个,把第五个赋值给第四个,依次6->5,7->6,发现6,7一样的值,通过len--删除最后一空间,达到任务
    int j;
    for(j=pos-1;j<L.len-1;j++){//往前移动元素,len为啥-1,因为到七的位置下标是第六,为什么小于第六,因为第七的位置上没有值,也就是说后面没有值再付给它,直接把第六删了
        L.data[j]=L.data[j+1];
    }
    L.len--;//顺序表长度减一,中间少了一个,都往前移,倒数第一个和倒数第二的元素值是一样的,因为是通过后一个赋值到前一个,所以把最后面那个元素删掉



}

//打印顺序表,这里不加&L因为不需要修改
void PrintList(Sqlist L){
    int i;
    for(i=0;i<L.len;i++){
        printf("%3d",L.data[i]);//为了打印到一行
    }
}
//查找某个元素的位置,找到了返回该元素的位置,否则返回0
int LocateElem(Sqlist L,ElemType searchelem){
    int i;
    for(i=0;i<L.len;i++){
        if(searchelem==L.data[i]){
            return i+1;//i是数组的下标,加一以后是顺序表的下标,说过了return会让函数直接结束
        }
    }
    return 0; //循环结束了,还没找到

}

int main() {
    Sqlist L;//定义了一个顺序表
    bool retInsert;//用来装函数的返回值,布尔类型是true,或者false
    bool retDelete;
    L.data[0]=1;//往顺序表放的元素,静态输入
    L.data[1]=2;
    L.data[2]=3;
    L.len=3;//设置长度
    retInsert=ListInsert(L,2,60);
    if(retInsert){
        printf("insert sqlist success\n");
        PrintList(L);
    } else{
        printf("插入失败\n");
    }
    printf("\n-------------------------------------\n");
    //删除的元素存在del中
    ElemType del;
    retDelete=ListDelete(L,1,del);//删掉第一个元素
    if(retDelete){
        printf("delete sqlist success\n");
        printf("delete element is%3d\n",del);
        PrintList(L);
    }
     printf("\n-------------------------------------\n");
    int searchLoc;//存储元素位置
    searchLoc=LocateElem(L,60);
    if(searchLoc){
        printf("found success\n");
        printf("element position is%3d\n",searchLoc);
    }else{
        printf("don't found this one\n");
    }

    return 0;
}

标签:return,线性表,删除,int,pos,len,基本操作,data,物理
From: https://blog.csdn.net/Binyu_Z/article/details/137408341

相关文章

  • (待完善)ping不通物理机
    问题的关键点:物理机ipv4与虚拟机ipv4相同解决方法:更改虚拟机静态ipv4,更改映射点击查看代码[root@hadoop101~]#vim/etc/sysconfig/network-scripts/ifcfg-ens33IPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-priv......
  • mysql 数据库基本操作
    mysql数据库基本操作1、创建五张表–user表:后台用户表–product表:产品表–account表:客户账户表–product_account表:客户购买表–customer表:客户表2、创建表SQL语句:注意:下面SQL语句是直接在控制台创建表即:WIN+R-->cmd-->mysql-uroot-p密......
  • win server系统物理机转成虚拟机出现 计算机丢失api-ms-win-crt-stdio-|1-1-0.dll问题
     物理机转移虚拟机的方案有很多种,这里讲下官方的这个转移工具转移,很简单下载下来一步步跟着点就好了。但是server系统的话可能会出现如图这样子的报错,缺少dll文件,这是因为server系统本身缺少这个文件组,解决方式有两种:1.去下载dll表文件,放置对应的文件夹下面,重新迁移2.利用......
  • MySQL数据库 数据库基本操作(二):表的增删查改(上)
    1.CRUDCRUD即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写,就是数据库基本操作中针对表的一系列操作.2.新增(create)-->insert语法:insertinto表名[列名1,列名2…]values(val1,val2…)[注意]列名可以没有,如果没有列名,所......
  • 单链表 基本操作
    目录初始化求表长按序号查找结点按值查找结点插入结点(后插)插入结点(前插)删除结点(直接删除)删除结点(间接删除)头插法建立单链表尾插法建立单链表打印单链表 总代码测试样例 初始化//单链表typedefintElemType;typedefstructLNode{//这时这个LNode......
  • 03 MySQL数据库的基本操作-DDL
    DDL(DataDefinitionLanguage),数据定义语言,该语言部分包括以下内容对数据库的常用操作对表结构的常用操作修改表结构可以在命令行里面进行如下的操作;也可以在Navicat图形化工具中操作创建数据库createdatabase数据库名[库选项]例如:createdatabase数据库......
  • 非关系型数据库——Redis基本操作
    目录一、Redis数据库常用命令1.Set——存放数据 2.Get——获取数据3.Keys——获取符合条件的键值4.Exists——判断键值是否存在5.Del——删除指定键值6.Type——获取键值对应的类型7.Rename——对已有键值重命名(覆盖)8.Renamenx——对已有键值重命名(不覆盖)9.Dbsize—......
  • (自学#Python)Day08-字典的定义及基本操作
    (自学Python)Day08-字典的定义及基本操作一、字典的定义及创建"""字典dict定义:由一系列键值对组成的可变散列容器。操作:创建添加定位删除遍历"""#1.创建#列表善于存储单一......
  • 数据结构 第二章(线性表)
    写在前面:本系列笔记主要以《数据结构(C语言版)》为参考,结合下方视频教程对数据结构的相关知识点进行梳理。所有代码块使用的都是C语言,如有错误欢迎指出。视频链接:第01周a--前言_哔哩哔哩_bilibili一、线性表的定义和特点        同一线性表中的元素必定具有相同的特性......
  • NASA数据集——2014 年、2015 年和 2017 年北美地区土壤地球物理属性值(源层厚度 (ALT)
    ABoVE:AirSWOTColor-InfraredImageryOverAlaskaandCanada,2017简介文件修订日期:2019-04-25数据集版本:1摘要本数据集提供了根据2014年、2015年和2017年8月和10月在阿拉斯加北部12个研究地点(除个别地点外)采集的机载次冠层和次表层微波观测站(AirMOSS)P......