顺序表的插入和删除、数组的增删改查和二分查找

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "PingFang SC" }
span.s1 { font: 24.0px Helvetica }

1.顺序表的表示

为实现顺序表的操作,首先要将其表示出来,用同数据类型的数组和表示数组的长度的整型变量表示。

public class LineList{
    private int[] data;
    private int length;
    public LineList(){

    }
    public void setData(int[] data){
        this.data=data;
    }
    public void setLength(int length){
        this.length=length;
    }
    public int[] getData(){
        return (this.data);
    }
    public int getLength(){
        return (this.length);
    }
}
2.插入操作和程序实现
方法:由后至前将元素向后移动
例如:插入一个值为a的整型元素
public class LineList{
    private int[] data;
    private int length;
    public LineList(){

    }
    public void setData(int[] data){
        this.data=data;//回忆this的用法
    }
    public void setLength(int length){
        this.length=length;
    }
    public int[] getData(){
        return (this.data);
    }
    public int getLength(){
        return (this.length);
    }
}
public boolean insert(int i, int a){//位置和元素的定义
    int j;//表长度
    if (length>=data.length) {
        System.out.println("this table is overflow.");
        return false;
    }//判断表长度的,是否溢出
    if (i<0 || i>length) {
        System.out.println("this is position mistake."+i);
        return false;

    }//元素的位置要在表之内,不可以在没有元素的位置,比如中间断开的情况
    for (j=length-1;j>=i; j--) {
        data[j+1]=data[j];//??
        data[i]=a;
        length ++;//??
        return true;
    }
}

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "PingFang SC" }

数组的定义、初始化、赋值

public class TestArray{
    public static void main(String[] args) {
        long[] arr=new long[] {2,3,4};
        //定义、初始化、赋值
        arr[0]=1;
        //如果数组已经有了值了,则以有的值为主,且将原值覆盖
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        //System.out.println(arr[3]);越界了,因为数组的长度是3

    }
}

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "PingFang SC" }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "PingFang SC"; min-height: 33.0px }

面向对象编程方式

一、使用自定义类封装数组

//后期有必要,再做一下题目,巩固一下,

//你只是看着视频理解了一下

//敲了一下

MyArray{
    //封装一个数组
    private long[] arr;//(1)
    //有效数据的长度
    private int elements;
    //初始化为0,所以可以不用赋值,其实是在测试类中插入元素个数来确定的

    public MyArray(){
        arr=new long[50];//为(1)

    }
    public MyArray(int maxsize){
        arr=new long[maxsize];
    }
    //算是一个重载

    /*插入数据*/
    public void insert(long value){
        arr[elements]=value;
        elements++;
    }

    //显示数据  查一下API,display和insert是API里面应该有的,包装而成的
    /*当然也可能是自定义的,只是一个名称,真正的功能是函数体来实现的*/
    public void display(){
        System.out.print("[");
        for (int i=0;i<elements;i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.print("]");

    }

    /*用for循环来遍历,得到元素对应的索引号*/
    public int search(long value){
        int i;
        for (i=0;i<elements;i++) {
        if (value==arr[i]) {
                break;
        }
        }
        if (i==elements) {
            return -1;
            //此时已经到了最后一个,还搜索不到的话则表示不存在,此时显示-1
            //看完一小节后,尝试着默一下,不要完全对着敲,效果不好。
        }
        else{
            return i;
        }
    }

    /*查找数据,根据索引来查*/
    public long get(int index){
        if (index>=elements||index<0) {
          throw new ArrayIndexOutofBoundsException();
        }else{
            return arr[index];
        }
    }

    /*删除数据,即被删除的元素被覆盖,且有效长度减1*/
    public void delete(int index){
        if (index>=elements||index<0) {
           throw new ArrayIndexOutofBoundsException();

        }else{
            for (int i=index;i<elements;i++) {
              arr[index]=arr[index+1];
              //把后面的元素前移位
            }
            elements--; 

        }
    }

    public void change(int index,int newvalue){
        if (index>=elements||index<0) {
           throw new ArrayIndexOutofBoundsException();

        }else{
            arr[index]=newvalue;
        }

    }

}
//后期有必要,再做一下题目,巩固一下,
//你只是看着视频理解了一下
//敲了一下
MyOrderArray{//修改添加方法,变成顺序插入数组
    //封装一个数组
    private long[] arr;//(1)
    //有效数据的长度
    private int elements;
    //初始化为0,所以可以不用赋值,其实是在测试类中插入元素个数来确定的

    public MyOrderArray(){
        arr=new long[50];//为(1)

    }
    public MyOrderArray(int maxsize){
        arr=new long[maxsize];
    }
    //算是一个重载

    //插入数据,顺序插入,如何顺序插入?必须由小到大
    public void insert(long value){
        int i;
        for(i=0;i<elements;i++){
            if (arr[i]>value) {
                break;
            }
        }for (int j=elements;j>i;j--) {
           arr[j]=arr[j-1];
        }//元素后移,且加一
        arr[i]=value;
        elements++;
    }

    //显示数据  查一下API,display和insert是API里面应该有的,包装而成的
    //当然也可能是自定义的,只是一个名称,真正的功能是函数体来实现的
    public void display(){
        System.out.print("[");
        for (int i=0;i<elements;i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.print("]");

    }

    //用for循环来遍历,得到元素对应的索引号
    public int search(long value){
        int i;
        for (i=0;i<elements;i++) {
        if (value==arr[i]) {
                break;
        }
        }
        if (i==elements) {
            return -1;
            //此时已经到了最后一个,还搜索不到的话则表示不存在,此时显示-1
            //看完一小节后,尝试着默一下,不要完全对着敲,效果不好。
        }
        else{
            return i;
        }
    }

    //查找数据,根据索引来查
    public long get(int index){
        if (index>=elements||index<0) {
          throw new ArrayIndexOutofBoundsException();
        }else{
            return arr[index];
        }
    }

    //线性查找和二分法查找(前提:顺序数组,从小到大,但问题是这个好像没有对其从小到大排序,且没有判断啊??)
    public int binarySeach(long value){
        int middle=0;//中间的值
        int low=0;//最左边的值
        int pow=elements;

        //为什么最大的等于有效数据elements??它表示有效数据的长度,而不是最大值啊??
        while(true){
            middle=(pow+low)/2;
            if(arr[middle]==value){
                return middle;
            }else if (low>pow) {
                return -1;
                //则表示不合理的
            }else{
                if(arr[middle]>value){
                    low=middle-1;
                    //往左边查找,这好像是以下标的方式为索引
                }else{
                    low=middle+1;
                    //往右查找
                }

            }
        }
    }

    //删除数据,即被删除的元素被覆盖,且有效长度减1
    public void delete(int index){
        if (index>=elements||index<0) {
           throw new ArrayIndexOutofBoundsException();

        }else{
            for (int i=index;i<elements;i++) {
              arr[index]=arr[index+1];
              //把后面的元素前移位
            }
            elements--; 

        }
    }

    public void change(int index,int newvalue){
        if (index>=elements||index<0) {
           throw new ArrayIndexOutofBoundsException();

        }else{
            arr[index]=newvalue;
        }

    }

}

public class TestMyArray{
    public static void main(String[] args) {
        MyArray arr=new MyArray();
        arr.insert(13);//索引号0
        arr.insert(34);//索引号1
        arr.insert(90);//索引号2

        arr.display();
        System.out.println(arr.seach(34));
        System.out.println(arr.get(1));
        arr.delete(1);
        arr.display();
        arr.change(0,12);

        /*
        MyOrderArray arr=new MyOrderArray();
        arr.insert(90);
        arr.insert(30);
        arr.insert(80);
        arr.display();
        System.out.println(arr.binarySeach(90));
        */
    }

}
//运行结果
//[13 34 90]
//1
//34
//[13 90]

原文地址:https://www.cnblogs.com/shijinglu2018/p/8449036.html

时间: 2024-11-05 15:54:52

顺序表的插入和删除、数组的增删改查和二分查找的相关文章

用C语言实现顺序表的插入和删除算法

什么是线性表? 线性表是n个数据元素的有限序列.根据线性表的显现方式,线性表又分为顺序表(数据元素在内存中的存储空间是连续的)和链表(数据元素在内存中的存储空间是不连续的). 线性表如何用C语言实现?线性表可以进行哪些操作? 在C语言中,线性表通过结构体的方式来实现.结构体中定义了线性表的存储空间地址,当前长度,和当前分配的存储容量.操作包含在指定位置插入某一元素.删除指定元素.查找指定的元素等.在这里重点介绍插入和删除算法. 下面就是关于这一部分内容的陈述. 线性表的C语言实现 需要先定义好的

数组的增删改查操作

做批量数据录入时须要对json内的数组进行增删改查操作,splice还是非常强大的记录一下用法. var lang = ["php","java","javascript"]; //删除 var removed = lang.splice(2,1); console.log(lang); //php,javascript //console.log(removed); //java ,返回删除的项 //插入 var insert = lang.s

(52)指针 (53)数组的增删改查

(52)指针 1. int * p定义一个指针 2. P=&a就能将指针指向变量a 3.定义一个赋值函数不能直接赋值需要用指针 1 #include<stdio.h> 2 void f1(int *b) 3 { 4 *b=10; 5 } 6 int main(void) 7 { 8 int a=1; 9 f1(&a); 10 printf("%d",a); 11 return 0; 12 } (53)数组的增删改查 1 #include<stdio.h

js数组的增删改查

array 数组的增删改: push 从数组后面推入一个元素或多个元素 var arr = [1,2,3]; ? // 返回:修改后数组的长度 arr.push(4,5,6); pop 删除数组最后一个元素 // 数组的pop方法用于将数组的最后一个元素移除 var arr = [1,2,3]; ? // 返回 被删除的元素: arr.pop(); unshift 从数组前面添加一个或多个元素 var arr = [1,2,3]; ? // 返回:修改后数组的长度 arr.unshift(4,5

简单顺序表的插入,删除,指定位置,指定元素的插入删除操作

头文件 SeqList.h #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include<stdio.h> #include<string.h> #include<assert.h> #define MAX_SIZE 10 typedef int DataType; typedef unsigned int size_t; typedef struct SeqList { DataType array[MAX_SIZE]; s

数组的 增删改查 及常见方法

<script>var arr=[1,2,3,4]// 增 // push() 方法 // 在数组末尾增加元素 返回的是新数组的长度 // arr.push(5,6) // alert(arr.push(5,6))//8 // alert(arr)//1,2,3,4,5,6,5,6 // unshift()方法 // 想数组的最前面添加元素,返回的是新数组的长度 var arr2=[1,2,3,4] arr.unshift(5,6); //alert(arr)//5,6,1,2,3,4 //

JavaScript中数组的增删改查

                                           数组的增加 ary.push()   向数组末尾添加元素,返回的是添加后新数组的长度,原有数组改变 ary.unshift()  向数组开头添加元素,返回的是添加后新数组的长度,原有数组改变 var ary=[1,2,3,4]; var res=ary.unshift(6); console.log(res); ---->5 返回的是新数组的长度 ary.splice(n,m,x)从索引n开始删除m个元素,把新

数组的增删改查

数组    数组的遍历     (1)通过for循环来实现遍历 /* 数组的遍历   */  public class Array{  public static void main(String[]args)  {  int []score={59,89,85,96,78,23};//静态初始化        for(int i=0;i<score.length;i++)  {  System.out.print(score[i]+"\t");  }  }  } 遍历过程中提到

MongoDB 数据库创建删除、表创建删除、数据增删改查

一.管理 mongodb 数据库:mongo 查看所有数据库列 表 show dbs 二. 创建数据库 创建 数据库 use student 如果真的想把这个数据库创建成功,(collections)中插入数 据.不需要专门创建集合,只db.student 系统发现 是一个陌生的集合名字,所以就显示当前的数据集合(中叫表)删除集合,删除指定的集合 1.查询所有记 录 db.userInfo.find(); 相当于:select* from userInfo; 2.查询去掉后 的当前聚集集合中的某