2. 线性表——数组

Posted zhousya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2. 线性表——数组相关的知识,希望对你有一定的参考价值。

1.什么是数组

   1. Java中,数组是用来存储固定大小的【同类型】元素。

   2. 创建数组时,先在内存中划分出一块连续的内存块,然后当有数据进入的时候会将数据按顺序的存储在这块连续的内存中。

   3. 读取数组元素时,需要提供数组中的索引,然后根据数组索引将内存中的数据取出来,返回给读取程序;数组索引是从0开始的。

   4. 数组的类型可以是基本数据类型和引用类型,且数组初始化后,其长度不可变;

技术图片1.1 数组的表示

2.数组的基本操作

  1. 创建(初始化及赋值):

            静态初始化:数据类型[] 数组名 = {元素1,元素2……};

                       数据类型[] 数组名 = []{元素1,元素2……};

            动态初始化:数据类型[] 数组名 = new 类型[数组大小];

                   赋值:数组名[数组下标] = 数据元素;

   2. 删除:删除数组中的一个元素:利用后一个元素向前逐一覆盖前一个元素的方法;

   3. 插入:向数组中插入一个元素,将插入位置及之后的所有实际使用元素都向后移动一位,然后将插入的数赋值给带插入的位置;

 

3.数组的代码实现

  1 package com.Array;
  2 
  3 /*
  4 * 数组的基本操作:
  5 *    1. 创建 , 赋值 , 遍历
  6 *    2. 删除
  7 *    3. 添加
  8 *    4. 反转
  9 * */
 10 
 11 
 12 import java.util.Random;
 13 import java.util.Scanner;
 14 
 15 public class DemoBaseDo {
 16     // 定义数组的容量
 17     private int capacity = 10;
 18     // 定义一个 容量为10 的int型数组
 19     private int[] array = new int[capacity];
 20     // 用来存储数组的实际使用空间
 21     private int useLenght;
 22 
 23     public static void main(String[] args) {
 24         Scanner scanner = new Scanner(System.in);
 25         DemoBaseDo arr = new DemoBaseDo();
 26 
 27       /*  System.out.print("为数组赋值的个数:");
 28         arr.useLenght = scanner.nextInt();
 29       */
 30         // 1. 为数组赋值
 31         for(int i=0;i<arr.capacity;i++){
 32             arr.array[i] = scanner.nextInt();
 33             arr.useLenght++;
 34         }
 35         // 1. 数组遍历打印
 36         arr.printOut();
 37 
 38         // 2. 删除
 39         System.out.print("删除后");
 40         arr.delete(3);
 41         arr.printOut();
 42         arr.delete(5);
 43         arr.printOut();
 44         arr.delete(12); // 测试,是否删除失败
 45 
 46         // 3. 插入
 47         System.out.print("插入后");
 48         arr.insert(4,0);
 49         arr.printOut();
 50         arr.insert(7,0);
 51         arr.printOut();
 52         arr.insert(8,0); // 测试,是否插入失败
 53 
 54         // 4. 反转
 55         arr.reverse();
 56         System.out.print("反转后");
 57         arr.printOut();
 58     }
 59 
 60     public void printOut(){
 61         System.out.print("
"+"数组输出:");
 62         for(int i=0;i<useLenght;i++){
 63             System.out.print(this.array[i]+" ");
 64         }
 65         System.out.println();
 66     }
 67 
 68     public boolean delete(int index){
 69         index -= 1;
 70         if(useLenght==0){
 71             System.err.println("数组以空");
 72             return false;
 73         }
 74         if(index<0 || index >= useLenght ) {
 75             System.out.println("请在 1-"+(useLenght)+"之间删除数据");
 76             return false;
 77         }
 78         for (int i = index; i < useLenght-1 ; i++) {
 79             this.array[i] = this.array[i + 1];
 80         }
 81         useLenght--;
 82         this.array[useLenght]=0;
 83         return true;
 84     }
 85 
 86     public boolean insert(int index,int num){
 87         index -= 1;
 88         if(useLenght < capacity) {
 89             if(index <= useLenght+1){
 90                 for (int i = useLenght; i > index ; i--) {
 91                     this.array[i] = this.array[i - 1];
 92                 }
 93                 useLenght++;
 94                 this.array[index] = num;
 95                 return true;
 96             }else{
 97                  System.out.println(" 插入的位置超过当前实际使用数组的长度! ");
 98                  return false;
 99             }
100 
101         } else{
102             System.out.println(" 数组已满,插入失败! ");
103             return false;
104         }
105     }
106     public void reverse(){
107         for(int i = 0; i< useLenght/2 ;i++){
108             int temp = array[i];
109             array[i] = array[useLenght-1-i];
110             array[useLenght-1-i] = temp; // useLenght-1 为当前实际使用数组长度的下标
111         }
112     }
113 
114 }

 

4.运行结果

          技术图片

备注:学习过程中难免会出现很多错误,请大家指教!有问题可以直接评论我,谢谢!

 

以上是关于2. 线性表——数组的主要内容,如果未能解决你的问题,请参考以下文章

线性表的顺序存储结构

博客作业2---线性表

大话数据结构-2

C中线性表和链表的区别

线性表(存储结构数组)--Java 实现

2. 线性表——数组