>  기사  >  Java  >  Java를 사용하여 순차 테이블 데이터 구조를 구현하는 방법은 무엇입니까?

Java를 사용하여 순차 테이블 데이터 구조를 구현하는 방법은 무엇입니까?

WBOY
WBOY앞으로
2023-04-21 14:31:081709검색

    머리말

    선형 목록은 동일한 특성을 가진 n개의 데이터 요소로 구성된 유한 시퀀스입니다. 선형 테이블은 실제로 널리 사용되는 데이터 구조입니다. 일반적인 선형 테이블에는 시퀀스 목록, 연결 목록, 스택, 큐, 문자열 등이 포함됩니다. 선형 테이블은 논리적으로 선형 구조, 즉 연속적인 직선입니다. 그러나 물리적 구조가 반드시 연속적인 것은 아닙니다. 선형 테이블이 물리적으로 저장되는 경우 일반적으로 배열 및 연결된 구조의 형태로 저장됩니다.

    Java를 사용하여 순차 테이블 데이터 구조를 구현하는 방법은 무엇입니까?

    1. 시퀀스 테이블

    1.1 시퀀스 테이블이란

    시퀀스 테이블은 연속된 물리적 주소를 갖는 저장 단위를 사용하여 데이터 요소를 순차적으로 저장하는 선형 구조입니다. 일반적으로 배열 저장소가 사용됩니다. 어레이의 데이터 추가, 삭제, 확인 및 수정을 완료합니다.

    사실은 배열입니다. 그렇다면 왜 시퀀스 테이블을 작성해야 할까요? 그냥 배열을 사용하는 것이 더 낫지 않을까요? 차이점은 클래스에서 작성하는 것이 객체 지향적일 수 있다는 것입니다.

    시퀀스 테이블은 일반적으로 다음과 같이 나눌 수 있습니다.

    • 정적 시퀀스 테이블: 고정 길이 배열 저장소 사용

    • 동적 시퀀스 테이블: 동적으로 열린 배열 저장소 사용

    정적 시퀀스 테이블은 얼마나 많은 양을 결정하는 데 적합합니다.

    정적 시퀀스 테이블의 고정 길이 배열로 인해 N이 너무 커집니다. 너무 많은 공간을 여는 것은 낭비이며, 너무 적은 공간을 여는 것만으로는 충분하지 않습니다. 시퀀스 테이블은 더욱 유연하며 필요에 따라 공간 크기를 동적으로 할당할 수 있습니다.

    2. 시퀀스 테이블의 간단한 구현

    2.1 시퀀스 테이블 만들기

    public class MyArrayList {
       public int[] elem;//数组
       public int usedSize;//数据的有效个数
     
       public MyArrayList(){
           this.elem = new int[10];
       }
    }

    Java를 사용하여 순차 테이블 데이터 구조를 구현하는 방법은 무엇입니까?2.2 시퀀스 테이블 인쇄

    //打印顺序表
    public void display(){
            for (int i = 0; i < this.usedSize; i++) {
                System.out.print(this.elem[i] + " ");
            }
            System.out.println();
        }

    2.3 시퀀스 가져오기 테이블 길이

    //获取顺序表长度
        public int size(){
            return this.usedSize;
       }

    2.4 pos 위치에 요소 추가

    순차 테이블에 삽입 요소가 삽입되면 그 요소는 그 앞에 저장되어야 합니다

    //在 pos 位置新填元素
        public void add(int pos,int data){
            if(pos < 0 || pos >usedSize){
                System.out.println("pos 位置不合法!");
                return;
            }
            if(isfull()) {
                Arrays.copyOf(this.elem,2*this.elem.length);
            }
            for (int i = this.usedSize - 1; i >= pos; i--) {
                this.elem[i + 1] = this.elem[i];
            }
            this.elem[pos] = data;
            this.usedSize++;
        }
        //判断是否满
        public boolean isfull(){
            return this.usedSize == this.elem.length;
        }
    Java를 사용하여 순차 테이블 데이터 구조를 구현하는 방법은 무엇입니까?2.5 요소가 포함되어 있는지 확인

    //判断是否包含某个元素
    public boolean contains(int toFind){
            for (int i = 0; i < this.usedSize; i++) {
                if(this.elem[i] == toFind){
                    return true;
                }
            }
            return false;
        }

    2.6 찾기 요소에 해당하는 위치

    //查找某个元素的对应位置,找不到返回-1
        public int search(int toFind){
            for (int i = 0; i < this.usedSize; i++) {
                if(this.elem[i] == toFind){
                    return i;
                }
            }
            return -1;
        }

    2.7 pos 위치의 요소 가져오기

    //获取pos位置的值
        public int getPos(int pos){
            if(pos < 0 || pos >= this.usedSize){
                System.out.println("pos 位置不合法");
                return -1;//这里说明一下,业务上的处理,不考虑
            }
            if(isEmpty()){
                System.out.println("顺序表为空!");
                return -1;
            }
            return this.elem[pos];
        }
        public boolean isEmpty(){
            return this.usedSize == 0;
        }

    2.8 pos 위치의 요소를 value로 설정

     //给pos位置元素更新value
        public void setPos(int pos,int value){
            if (pos < 0 || pos >= this.usedSize){
                System.out.println("pos 位置不合法");
                return;
            }
            if(isEmpty()){
                System.out.println("顺序表为空!");
                return;
            }
            this.elem[pos] = value;
        }

    2.9 삭제하려는 요소 삭제

    //删除第一次出现的关键字key
        public void remove(int toRmove){
            if (isEmpty()){
                System.out.println("顺序表为空!");
                return;
            }
            int index = search(toRmove);
            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--;
            //this.elem[useSize] = null;如果数组当中是引用数据类型
        }

    2.10 시퀀스 목록 지우기

    //清空顺序表
        public void clear(){
            this.usedSize = 0;
        }

    3. MyArrayList.java

    import java.util.Arrays;
    
    public class MyArrayList {
    
        public int[] elem;
        public int usedSize;
    
        public MyArrayList(){
            this.elem = new int[10];
        }
        //打印顺序表
        public void display(){
            for (int i = 0; i < this.usedSize; i++) {
                System.out.print(this.elem[i] + " ");
            }
            System.out.println();
        }
        //获取顺序表长度
        public int size(){
            return this.usedSize;
        }
        //在 pos 位置新填元素
        public void add(int pos,int data){
            if(pos < 0 || pos >usedSize){
                System.out.println("pos 位置不合法!");
                return;
            }
            if(isfull()) {
                Arrays.copyOf(this.elem,2*this.elem.length);
            }
            for (int i = this.usedSize - 1; i >= pos; i--) {
                this.elem[i + 1] = this.elem[i];
            }
            this.elem[pos] = data;
            this.usedSize++;
        }
        //判断是否满
        public boolean isfull(){
            return this.usedSize == this.elem.length;
        }
    
        //判断是否包含某个元素
        public boolean contains(int toFind){
            for (int i = 0; i < this.usedSize; i++) {
                if(this.elem[i] == toFind){
                    return true;
                }
            }
            return false;
        }
        //查找某个元素的对应位置,找不到返回-1
        public int search(int toFind){
            for (int i = 0; i < this.usedSize; i++) {
                if(this.elem[i] == toFind){
                    return i;
                }
            }
            return -1;
        }
    
        //获取pos位置的值
        public int getPos(int pos){
            if(pos < 0 || pos >= this.usedSize){
                System.out.println("pos 位置不合法");
                return -1;//这里说明一下,业务上的处理,不考虑
            }
            if(isEmpty()){
                System.out.println("顺序表为空!");
                return -1;
            }
            return this.elem[pos];
        }
        public boolean isEmpty(){
            return this.usedSize == 0;
        }
        //给pos位置元素更新value
        public void setPos(int pos,int value){
            if (pos < 0 || pos >= this.usedSize){
                System.out.println("pos 位置不合法");
                return;
            }
            if(isEmpty()){
                System.out.println("顺序表为空!");
                return;
            }
            this.elem[pos] = value;
        }
    
        //删除第一次出现的关键字key
        public void remove(int toRmove){
            if (isEmpty()){
                System.out.println("顺序表为空!");
                return;
            }
            int index = search(toRmove);
            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--;
            //this.elem[useSize] = null;如果数组当中是引用数据类型
        }
        //清空顺序表
        public void clear(){
            this.usedSize = 0;
        }
    }

    4. Test.java

    public class Test {
        public static void main(String[] args) {
            MyArrayList myArrayList = new MyArrayList();
            myArrayList.add(0,1);
            myArrayList.add(1,2);
            myArrayList.add(2,3);
            myArrayList.add(3,4);
            myArrayList.add(4,5);
            myArrayList.display();
            System.out.println(myArrayList.contains(3));
            System.out.println(myArrayList.getPos(3));
            myArrayList.setPos(0,99);
            myArrayList.display();
        }
    }

    위 내용은 Java를 사용하여 순차 테이블 데이터 구조를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제