c#数组插入元素在数组的最前面数组中原来的值依次向后排列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#数组插入元素在数组的最前面数组中原来的值依次向后排列相关的知识,希望对你有一定的参考价值。

参考技术A 创建一个数组a,用来存原来的数据,然后加入元素到原来元素的第一个位置,接着for循环,把a里面的数据依次放到原来的数组中。 参考技术B 那要看是什么数组了 如果是ArrayList 可以直接用 ArrayList对象.insert(0,object value);

Java基于数组的顺序表[增删改查]

  • 增加元素:头插addFirst(int val);尾插addLast(int val);中间插addIndex(int index,int val);        顺序表中实现增加元素的操作就是从插入元素下标开始,大于等于下标 对应的值依次向后移动一个单位,然后在指定下标位置增加指定元素。ps:尾插判断数组是否已满,若满,则扩容。
  • 删除元素:头删removeFirst();尾删removeLast();据下标删removeIndex(int index);删除索引中第一个元素为value的元素removeValueOnce(int value);删除索引中所有元素为value的元素removeValueAll(int value); 删除指定索引下标元素就是将大于此索引下标对应元素向前移,直接覆盖指定索引下标元素达到删除指定元素的效果。
  • 查找元素:查找当前数组是否存在boolean contains(int value);  根据索引查找对应元素位置int get(int index);  在数组中查找value值对应索引下标int getByValue(int value); 
  • 修改元素:根据索引修改元素int set(int index,int value);  将指定索引位置下标元素改为newValue;

package seqlist;

import java.util.Arrays;

/**
 * 基于数组的顺序表
 */
public class MyArry 
    private int[] data;  //在数组中存储元素
    private int size;    //动态数组中存储元素个数
    public MyArry()
        data=new int[10];
    
    /**
     * @param capacity 传入数组的大小
     */
    public MyArry(int capacity)
        data=new int[capacity];
    

    /**
     * 在数组头部插入元素
     * @param value 待插入元素的值
     */
    public void addFirst(int value)
        addIndex(0,value);
    

    /**
     * 在数组尾部插入元素
     * @param value 待插入元素的值
     */
    public void addLast(int value)
        addIndex(size,value);
    

    /**
     * 在数组的任意位置插入
     * @param index 数组下标
     * @param value 待插入元素的值
     */
    //判满  检验合法性   从后向前 移动元素  元素个数自加
    public void addIndex(int index,int value)
        if(size==data.length)
        grow();//若空间满,扩容
        
        if(index<0||index>size)
            System.err.println("add index illegal!");
            return;
        
        else
            for (int i = size-1; i >= index; i--) 
            data[i+1]=data[i];
        
            data[index]=value; //增加数据按对应的数组下标写入
            size++; //存储元素自加
        
    

    /**
     * 在数组中查找value值对应索引下标
     * @param value 待查找元素的值
     * @return
     */
    public int getByValue(int value)
        for (int i = 0; i < size; i++)  //遍历数组
            if(data[i]==value) 
                return i;
            
        
        //说明查找的值不在此数组中
        return -1;
    

    /**
     * 根据索引查询元素
     * @param index
     * @return
     */
    public int get(int index)
        if(index<0||index>=size)
            System.err.println("get index illegal!");
            return -1;
        
        return data[index];
    

    /**
     * 将指定索引位置元素修改为newValue
     * @param index 指定要修改的值对应的索引
     * @param newValue 要修改的值
     * @return 返回修改前的元素值
     */
    public int set(int index,int newValue)
        //判断合法
        if(index<0||index>=size)
            System.err.println("set index illegal!");
            return -1;
        
        int oldValue=data[index];
        data[index]=newValue;
        return oldValue;
    

    /**
     * 删除指定索引位置的元素  (后边的直接前移覆盖)
     * @param index
     */
    public void removeIndex(int index)
        if (index<0||index>=size)
            System.err.println("remove index illegal!");
            return;
        
        for (int i = index; i < size-1; i++) 
            data[i]=data[i+1];
        
        size--;
        data[size]=0;
    

    /**
     * 删除i对应的索引第一个值为value的节点
     * @param value 要删除的指定值
     */
    public void removeValueOnce(int value)
        for (int i = 0; i < size; i++) 
            if (data[i]==value)
                removeIndex(i);
                return;
            
        
    

    /**
     * 删除数组中所有指定元素值一样的元素
     * 注意要用while循环
     * @param value 要删除的指定元素
     */
    public void removeValueAll(int value)
        for (int i = 0; i < size; i++) 
            while (i != size && data[i] == value)
                removeIndex(i);
            
        
    

    /**
     * 删除第一个元素
     */
    public void removeFirst()
        removeIndex(0);
    

    /**
     * 删除最后一个元素
     */
    public void removeLast()
        removeIndex(size-1);
    

    public boolean contains(int value)
        int index = getByValue(value);
        if (index==-1)
            return false;
        
        return true;
    
    /**
     * 打印数组
     * @return
     */
    public String toString()
        String ret = "[";
        for (int i = 0; i < size; i++) 
            ret += data[i];
            if (i != size-1)
                ret += ",";
            
        
        ret += "]";
        return ret;
    

    /**
     * 扩容 乘2
     */
    private void grow() 
        int[] newData= Arrays.copyOf(this.data,this.data.length<<1);
                this.data=newData;
    

测试代码块 

package seqlist;

public class Test 
    public static void main(String[] args) 
        MyArry myArry = new MyArry(3);
        myArry.addLast(1);
        myArry.addLast(2);
        myArry.addLast(3);
        myArry.addLast(4);
        myArry.addLast(2);
        myArry.removeValueAll(2);
        System.out.println(myArry);
    


已完~~ thanks

以上是关于c#数组插入元素在数组的最前面数组中原来的值依次向后排列的主要内容,如果未能解决你的问题,请参考以下文章

Array常用方法

排序--插入

C#数组如何添加元素

插入排序复习

排序算法原理及代码实现(c#)

数组排序之选择排序