当前位置:   article > 正文

Java 顺序表的基本操作(增删查改,扩容,冒泡排序,逆序)_java顺序表的基本操作

java顺序表的基本操作
  1. 数组的初始化
    1. package list;
    2. public class Seqlist {
    3. private Object[] elements;
    4. private static int size ;//将size作为数组elements容器
    5. public Seqlist(int capacity){
    6. size = 0;
    7. elements = new Object[capacity];
    8. }
    9. public Seqlist() {
    10. this(10);
    11. }

  2. 检查数据是否规范

    1. //检查index是否合法
    2. private void checkIndexforAdd(int index) {
    3. if(index<0||index>size) {//index在【0size】范围
    4. throw new IllegalArgumentException(" Index Error[0,size]");
    5. }
    6. }

  3. toString()方法的重写--目的是为了使数据更加直观的显示

    1. @Override
    2. public String toString() {//重写toSring()方法
    3. StringBuilder sb = new StringBuilder();
    4. sb.append("[");
    5. for(int i = 0;i<size;i++) {
    6. sb.append(elements[i]);//追加数据进入数组中,并将数组的数据打印追加
    7. if(i!=size-1) {
    8. sb.append(",");
    9. }
    10. }
    11. sb.append("]");
    12. return sb.toString();
    13. }

  4. 根据下标增加数据

    1. public void add(int index ,Object x) {
    2. //添加add方法
    3. //index属性代表位置下标,x代表位置下标所对应的数据
    4. checkIndexforAdd(index);
    5. /*扩容
    6. 1.重新申请一个数组temp,并且数组容器为elements的两倍(扩容)
    7. 2.将原数组的数据赋值给新的数组
    8. 3.新数组赋值给原数组*/
    9. if(size==elements.length) {
    10. Object[] temp = new Object[2*size];
    11. for(int i = 0;i<size;i++) {
    12. temp[i] = elements[i];
    13. }
    14. elements = temp;
    15. }
    16. for(int i = size-1; i>= index ; i--) {
    17. //范围[index,size-1],在此范围内,i步长-1,遍历这个范围内的数据
    18. elements[i+1] = elements[i];
    19. }
    20. //从最后一个往前数,后面的数据依次等于前面的数据,并把每个数据往后移动一位
    21. //i>= index不成立时,退出循环结构
    22. elements[index] = x;//数组下标对应的数为x
    23. size++;//数组长度需要多一位
    24. System.out.println("添加的数据:"+"["+index+","+x+"]");
    25. //实现头插法
    26. }

  5. 根据下标删除数据

    1. public int delete(int index) {//delete()方法,使通过删除下标来删除下标所对应的数据
    2. checkIndexforAdd(index);
    3. if(isEmpty()) {System.out.print("Array Error,顺序表错误");}
    4. else
    5. for(int i = index+1 ;i<=size-1;i++) {
    6. /*范围在[index-1,size-1]之中,
    7. 一定要确定index是我们赋予的需要删除数据的参数,在index位上的值我们是不需要的
    8. 所以前后交换数据时最小一位并不是index,而是index的后一位,
    9. index+1将数据传给index这个位置,index下标被删除了。
    10. 步长为1,在此范围内,i++
    11. */
    12. elements[i-1]=elements[i];
    13. //将数据全部往前移动一位,将删除一位
    14. }
    15. size--;
    16. //删除一位
    17. return index;
    18. }

  6. 根据数据判定是否存在,根据下标查询数据

    1. //contain方法--如果包含这个key数据,输出false,否则输出true
    2. public boolean contain(int key) {
    3. for(int i=0;i<size;i++){
    4. if((int)key==(int)elements[i]){
    5. return false;}
    6. }
    7. return true;
    8. }
    1. public int find(int index) {//find()查找方法,通过查找下标得到数据
    2. if(isEmpty()) {System.out.print("Array Error,没有该数据");}
    3. else {
    4. checkIndexforAdd(index);
    5. if(elements[index]!=null) {
    6. System.out.println("查找的数据:"+"["+index+","+elements[index]+"]");
    7. }
    8. }
    9. return index;
    10. }

  7. 逆序输出(可以使用二分法)

    1. public void reverse() {
    2. Object[] temp= new Object[size];
    3. for (int i = 0; i < size; i++) {
    4. temp[i]=elements[size-i-1];
    5. }
    6. elements=temp;
    7. for (int i = 0; i < size; i++) {
    8. System.out.print(elements[i]+" ");
    9. }
    10. }

    二分法

    1. int arr[]= {1,2,3,4,5};
    2. int middle=arr.length/2;
    3. for (int i = 0; i <middle; i++) {
    4. int temp=arr[i];
    5. arr[i]=arr[arr.length-i-1];
    6. arr[arr.length-i-1]=temp;
    7. }
    8. for (int i = 0; i < arr.length; i++) {
    9. System.out.print(arr[i]+" ");
    10. }

  8. 下标数据修改

    1. public boolean update(int index,Object x) {//update()方法,通过查找下标,修改数据
    2. if(isEmpty()) {System.out.print("Array Error,顺序表错误");}
    3. else {
    4. for(int i = 0;i<size-1;i++) {
    5. if(i==index) {
    6. elements[i] = x ;
    7. System.out.println("修改的数据为"+"["+index+","+x+"]");
    8. }
    9. }
    10. }
    11. return true;
    12. }

  9. 排序(这个很简单,我在这里是用的是交换排序中的冒泡排序)

    1. public Object delLast() {//delLast()方法代表倒排序方法,数组中数据的排序
    2. if(isEmpty()) {System.out.print("Array Error,顺序表错误");}
    3. else {
    4. Object temp;//创造出一个object对象,作为容器和可变变量
    5. for(int i=0;i<size;i++) {
    6. for(int j=i+1;j<size;j++) {//两次遍历,一定要确定j=i+1
    7. if((int)elements[i]<= (int)elements[j]) {//object类型强制转换为int
    8. //冒泡排序,将最小的赋给第一位,然后遍历的都往前一位比较
    9. temp=elements[i];
    10. elements[i]=elements[j];
    11. elements[j]=temp;
    12. }
    13. }
    14. }
    15. }
    16. return 0;
    17. }

  10. main()方法调用各种方法

    1. public static void main(String[] args) {
    2. Seqlist list = new Seqlist();//创造一个对象,再创建一个随机数组
    3. for(int i = 0;i<9;i++) {
    4. int x = (int)Math.round(Math.random()*10);//启用随机数,建立[0,100]的数据数组
    5. list.add(i,x);//对象调用add(index,x)方法,参数index变为i,x变为x
    6. }
    7. System.out.println(list);
    8. list.len();
    9. list.find(3);//启用find()查找方法
    10. list.contain(7);
    11. System.out.println("----------------------------");
    12. list.add(2, 89);//启用add()添加方法
    13. System.out.println(list);
    14. System.out.println("----------------------------");
    15. list.delete(1);//启用delete方法
    16. System.out.println(list);
    17. System.out.println("----------------------------");
    18. list.update(6, 80);//启用update()修改方法
    19. System.out.println(list);
    20. System.out.println("----------------------------");
    21. list.delLast();
    22. System.out.println("倒序输出:"+list);
    23. System.out.println("----------------------------");
    24. list.delFirst();
    25. System.out.println("正序输出:"+list);
    26. System.out.println("----------------------------");
    27. System.out.print("逆序:");
    28. list.reverse();
    29. list.clear();
    30. System.out.println("数据清空:"+list);
    31. }

  11. 结果展示:

     

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/538312
推荐阅读
相关标签
  

闽ICP备14008679号