Java对顺序表的练习

顺序表在底层本质上就是一个数组
所以对顺序表的操作就是对数组的操作
要加强对数组的练习

import java.util.Arrays;

class Practice{
    public static class MyArrayList {
        private int usedSize;
        private int[] elem;
        public MyArrayList(){
            this.elem=new int[5];
        }
        //输入
        public void insert(int num){
            this.elem[this.usedSize]=num;
            this.usedSize++;
        }
        //打印
        public void Show(){
            for (int i = 0; i <this.usedSize; i++) {
                System.out.print(this.elem[i]+" ");
            }
        }
        //判断满
        public boolean isFull(int[] elem){
            if(this.usedSize==elem.length){
                return true;
            }
            return false;
        }
        //扩容
        public void enlarge(){
            this.elem=Arrays.copyOf(this.elem,2*this.elem.length);
        }
        //在pos位置插入data
        public void add(int pos,int data){
            //先判断是否满了
            if(isFull(elem)){
                //System.out.println("满了!");
                enlarge();
            }
            //判断pos位置是否合法
            if (pos>this.usedSize||pos<0){
                System.out.println("pos位置不合法");
            }
            //移动元素
            //从后往前循环,保证不越界
            for (int i=usedSize-1 ;i>=pos; i--) {
                this.elem[i+1]=this.elem[i];
            }
            this.elem[pos]=data;
            this.usedSize++;
        }
        //是否包含某个元素
        public boolean contain(int toFind){
            for (int i = 0; i <this.usedSize ; i++) {
                if(this.elem[i]==toFind){
                    return true;
                }
            }
            return false;
        }
        //查找某个元素对应位置
        public int search(int toFind){
            for (int i = 0; i <this.usedSize ; i++) {
                if(toFind==this.elem[i]){
                    return i;
                }
            }
            return -1;
        }
        //获取pos位置的元素
        public int getPos(int pos){
            if(pos<0||pos>this.usedSize){
                return -1;
            }
            return this.elem[pos];
        }
        //给pos位置元素设置成value
        public void setPos(int pos,int value){
            if(pos<0||pos>this.usedSize){
                System.out.println("pos输入有误!");
                return ;
            }
            this.elem[pos]=value;
        }
        //获取顺序表长度
        public int Length(){
            return this.elem.length;
        }
        //清空顺序表
        public void Clear(){
            this.usedSize=0;
        }
        //删除第一次出现的关键字key=2
        public void Delete(int key){
            int index=search(key);
            if(index==-1){
                System.out.println("没找到!");
                return;
            }
            for (int i = index; i <this.usedSize-1 ; i++) {
                this.elem[i]=this.elem[i+1];
            }
            this.usedSize--;
        }
    }
    public static void main(String[] args) {
        MyArrayList list=new MyArrayList();
        list.insert(1);
        list.insert(5);
        list.insert(3);
        list.insert(2);
        list.Show();
        //插入
        list.add(3,7);
        System.out.println("插入后:");
        list.Show();
        //是否包含
        System.out.println();
        System.out.print(list.contain(3));
        //查找元素位置
        System.out.println();
        System.out.println("该元素的下标为:"+list.search(4));
        //获取pos位置元素
        System.out.println(list.getPos(3));
        //pos位置设为value
        list.setPos(2,9);
        list.Show();
        //获取长度
        System.out.println();
        System.out.println("长度为:"+list.Length());
        //删除第一次出现key
        list.Delete(1);
        list.Show();
        //清空顺序表
        System.out.println();
        System.out.println("清空顺序表");
        list.Clear();
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java顺序表是一种线性数据结构,它按照元素在内存中的顺序存储数据。顺序表的插入操作是将一个元素插入到指定位置,而不改变其他元素的位置。binsert是一种二分插入排序算法,用于在有序的顺序表中插入一个元素。 binsert算法的基本思想是通过二分查找找到插入位置,然后将插入位置之后的元素依次后移,最后将待插入的元素放入插入位置。 以下是Java顺序表binsert的实现代码示例: ```java public class SeqList { private int[] data; // 存储数据的数组 private int size; // 顺序表的大小 public SeqList(int capacity) { data = new int[capacity]; size = 0; } // 在指定位置插入元素 public void binsert(int index, int element) { if (index < 0 || index > size) { throw new IndexOutOfBoundsException("插入位置超出范围"); } // 二分查找找到插入位置 int low = 0; int high = size - 1; while (low <= high) { int mid = (low + high) / 2; if (data[mid] == element) { break; } else if (data[mid] < element) { low = mid + 1; } else { high = mid - 1; } } int insertIndex = low; // 将插入位置之后的元素依次后移 for (int i = size - 1; i >= insertIndex; i--) { data[i + 1] = data[i]; } // 将待插入的元素放入插入位置 data[insertIndex] = element; size++; } } ``` 使用示例: ```java public class Main { public static void main(String[] args) { SeqList list = new SeqList(10); list.binsert(0, 5); // 在位置0插入元素5 list.binsert(1, 3); // 在位置1插入元素3 list.binsert(1, 7); // 在位置1插入元素7 // 输出顺序表的元素 for (int i = 0; i < list.size; i++) { System.out.println(list.data[i]); } } } ``` 输出结果为: 5 7 3

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值