数组的插入和删除的算法运用

Posted dedema

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组的插入和删除的算法运用相关的知识,希望对你有一定的参考价值。

   输入五个歌曲名,按首字母进行依次升幂排序

   输入数字1 可以插入

   输入数字2可以删除

   输入数字0可以退出

一个数组有序,添加一个元素后,数组依然有序。

一个数组有序,删除一个元素后,数组依然有序。

 

程序如下

import java.util.Scanner;

public class test03{
    //申请一个整型类变量
    static int number=6;
    //申请一个类引用变量
    static String[] music =new  String[number];
    //申请一个字符串用变量
    static String M="000";
    
    //插入一个字符串方法
    public static String[] index_add(String [] MUSIC_0){
            //记录一个位置变量  如果是负数这表示遍历完没有相应的位置放到最后
            int al=-1;         // 如果是正数表示有相应位置要插入
            Scanner sc1 = new Scanner(System.in);
            M = sc1.next();
            //申请一个插入字符串用变量
            System.out.println(number);
            //申请字符串数组  number+1表示需要多申请一个字符串存放增加的变量
            String[] M_new = new String[number+1];
            
            //把之前歌名复制到新字符串数组
            for(int i =0;i<number;i++){
                    M_new[i]=MUSIC_0[i];
                }
            //遍历歌名的首字符需要插入位置
            for(int i=0;i<number;i++){
                    if(M.charAt(0)<=MUSIC_0[i].charAt(0)){
                        al=i;
                        break;
                    }    
                }
            //如果是负数这表示遍历完没有相应插入的位置,放到最后
            if(al<0){
                    M_new[number]=M;
                    for(String i:M_new)
                    {
                        System.out.print(i+‘ ‘);
                    }
                }else{ // 如果是正数表示有相应位置要插入     
                    for(int f=number;f>al;f-- ){
                    M_new[f]=M_new[f-1];  // 依次后移
                    }
                    M_new[al]=M;//插入
                    for(String i:M_new)
                    {
                        System.out.print(i+‘ ‘);
                    }
                    
                    System.out.println();
                }
              number++; //数组增加一位
              return M_new;//返回值
        }
        
        //删除一个字符串方法
        public static String[] index_delete(String[] a){
            //记录删除的位置
            int al=-1;
            
            Scanner sc1 = new Scanner(System.in);
            M = sc1.next();
            //遍历歌名的首字符需要删除位置
            for(int f=0;f<number;f++){
                    if(a[f].charAt(0)==M.charAt(0))
                    {    
                        al=f;
                        break;
                    }
                }
            //申请字符串数组  --number表示需要多申请一个字符串存放增加的变量
            String[] M_new = new String[--number];    
            if(al<0){//
                    System.out.println("找不到相应歌曲"+‘ ‘);
                }
                else{
                    
                    int j=0;
                    //删除一位字符串,重新复制到新的数组
                    for(int f=0;f<number;f++){
                            
                        if(f==al)
                        {    
                            j++;//删除位置 多加加一表示跳过复制
                        }
                        M_new[f]=a[j++];
                        
                    }
                    
                    for(String i:M_new)
                    {
                        System.out.print(i+‘ ‘);
                    }
                    System.out.println("删除成功");
                }
                
                return M_new;
            
        }
    public static void main(String[] args){
         Scanner sc = new Scanner(System.in);
        
                
        for(int i=0;i<music.length;i++){
            System.out.println("请输入第"+i+"歌曲名称");
            music[i] = sc.next();
        }
        String a;
        //每个字符串的首字母进行排序   冒泡排序
        for(int j=0;j<music.length-1;j++){
            for(int i=0; i<music.length-j-1;i++){
                if(music[i].charAt(0)>music[i+1].charAt(0)){
                    a = music[i+1];
                    music[i+1]=music[i];
                    music[i]=a;
            }
         }
            
        }
        System.out.print(‘ ‘);
        for(String i:music){
            System.out.print(i+‘ ‘);
        }
        System.out.print(‘ ‘);
        byte w=0;
        byte over=1;
        for(int i=0;i<6;){
        
        System.out.print("输入1数字增加一首歌曲名"+‘ ‘);
        System.out.print("输入2数字删除一首歌曲名"+‘ ‘);
        System.out.print("输入0退出"+‘ ‘);
        System.out.print(‘ ‘);
        w = sc.nextByte();
        switch(w){   //输入1表示增加一首歌曲
            case 1:
                System.out.println("请输入歌曲名"+‘ ‘);
                    music=index_add(music);//music 引用方法返回的数组地址
                break;
            case 2:  //输入2数字删除一首歌曲名
                System.out.println("请输入歌曲名"+‘ ‘);
                
                    music=index_delete(music);//music 引用方法返回的数组地址
                break;
            case 0:
                System.out.println("再次输入0结束操作");
                over=sc.nextByte();  //真正的退出
                break;
        }
        
        if(over==0){
            break;
            }
        }
    }
}

以上是关于数组的插入和删除的算法运用的主要内容,如果未能解决你的问题,请参考以下文章

算法给小码农插入排序洞天,希尔排序轮回

算法给小码农八大排序 八奇计只为宝儿姐

java数据结构与算法:稀疏数组的讲解运用

二分查找典型例题分析

MySQL常见6个考题在实际工作中的运用

MySQL常见6个考题在实际工作中的运用