数据结构与算法(2)

数组:

数组的基本操作:

public class partList {
    public static void main(String[] args) {

        //定义一个新的列表
        int [] array = new int[3];

        //数组的长度
        int arrayLength = array.length ;

        //给数组中的元素赋值
        for(int i = 0; i<arrayLength;i++){
            array[i] = i;
        }

        //遍历数组中的每个元素
        for(int i =0; i<arrayLength; i++){
            System.out.println("数组中的第"+i+"个元素为"+array[i]);
        }

    }
}

数组的添加:

package dataStructure;

import java.lang.reflect.Array;
import java.util.Arrays;

public class shuzu {
    public static void main(String[] args) {
        // 创建一个新的数组
        int [] array = new int [] {2,3,4};
        //快速查看数组中的元素
        System.out.println(Arrays.toString(array));
        //要加入数组的目标元素
        int des = 5;
        //数组长度
        int length = array.length;
        System.out.println(length);

        //添加一个新的元素在数组中
        //创建新的数组

        int [] array2 = new int[4];
        //将原来数组的每个元素添加到新的数组中去
        for(int i = 0;i<=length ;i++){
            if(i<length){
                array2[i] = array[i];
            }else {
                array2[length] = des;
            }
        }
        array = array2;
        System.out.println(Arrays.toString(array));
        
    }
}

数组的删除:

package dataStructure;

import java.util.Arrays;

public class shuzu2 {
    public static void main(String[] args) {
        // 创建一个新的数组
        int [] array = new int [] {2,3,4,5,6,7};
        //快速查看数组中的元素
        System.out.println(Arrays.toString(array));
        //要删除的数组中的目标元素的下标 / 数值为6
        int des =  4;

        //闯将一个新的数组,把删除前的赋值再新的数组,之后的赋值给新的数组
        int [] array2 = new int[array.length-1];

        for(int i =0; i<array.length-1 ;i++) {
            if (i < des) {
                array2[i] = array[i];
            } else {
                array2[i] = array[i + 1];
            }
        }

        array = array2 ;

        System.out.println(Arrays.toString(array));

    }
}

面向对象数组: 

package dataStructure;

import java.util.Arrays;

public class MyArray {
    private int [] elements ;

    public MyArray(){
        elements = new int [0];
    }

    ///获取数组对象的方法:
    public int size(){
        return elements.length;
    }
    ///展现数组中的元素
    public void show(){
        System.out.println(Arrays.toString(elements));
    }

    ///在数组中添加一个元素:
    public void add(int element){

        int [] element2 = new int[elements.length+1];

        for(int i = 0;i<elements.length ;i++){
            element2[i] = elements[i];
        }
        element2[elements.length] = element;

        elements = element2 ;
    }
    ///在数组中删除一个元素
    public void delete(int element_index){
        int [] element2 = new int[elements.length-1];

        if(element_index>elements.length-1){
            System.out.println("Error ; length is too long");
        }else {
            for(int i =0; i<elements.length-1 ;i++) {
                if (i < element_index) {
                    element2[i] = elements[i];
                } else {
                    element2[i] = elements[i + 1];
                }
            }
        }
        elements = element2;
    }
    ///取出指定位置的元素
    public int get(int index) {
        return elements[index];
    }

    ///插入一个元素到指定的
    public void insert(int index , int value){
        int [] element2 = new int [elements.length+1];
        for(int i =0; i<= elements.length; i++){
            if(i<index){
                element2[i] = elements[i];
            }else if(i == index){
                element2[index] = value;
            }else{
                element2[i] = elements[i-1];
            }
        }
        elements = element2;
    }
    ///替换一个位置的指定元素
    public void set(int index, int new_value){
        elements[index] = new_value;
    }
}

查找算法:

查找算法在数组中分为两类:线性查找和二分法查找

线性查找方法(check):

    public void check(int value){

        int index = -1 ;

        for(int i =0; i<elements.length; i++){
            if(elements[i] == value){
                index = i;
            }else {
                continue;
            }
        }
        if(index == -1){
            System.out.println("您搜索的元素不存在");
        }else{
            System.out.println(index);
        }
    }

二分法查找:

package dataStructure;

/// binary search

public class check {
    public static void main(String[] args) {
        //目标数组
        int [] array = new int[]{0,1,2,3,4,5,6,7};
        //目标元素
        int target = 3;
        int index = -1;

        int begin = 0;
        int end = array.length;
        int middle = (begin+end)/ 2;
        System.out.println(middle);

        while (true){
            if(array[middle] == target){
                index = middle;
                break;
            }else {
                if(target>array[middle]){
                    begin = begin+1;
                }else {
                    end = end -1;
                }

                middle = (begin+end)/2;
            }
        }
        System.out.println("this is target index"+index);



    }
}

 

package dataStructure;

public class MyStack {

    int [] elements ;

    public MyStack(){
        elements = new int[0] ;
    }

    //压入元素
    public void push(int element){
        int [] element2 = new int[elements.length+1];

        for(int i = 0;i<elements.length ;i++){
            element2[i] = elements[i];
        }
        element2[elements.length] = element;

        elements = element2 ;
    }

    //取出栈的元素
    public int pop(){

        if(elements.length==0){
            throw new RuntimeException("stack is empty");
        }

        int element = elements[elements.length-1];

        //创建新的数组,重新装入剩余的元素
        int [] element2 = new int[elements.length-1];
        for(int i =0; i<elements.length-1; i++){
            element2[i] = elements[i];
        }
        elements = element2;

        return element ;
    }
    
    //查看栈顶元素
    public int peek(){
        return elements[elements.length-1];
    }
    
    //判断栈是否为空
    public boolean isEmpty(){
        return elements.length == 0;
    }


}

队列:

 

package dataStructure;

import java.util.Arrays;

public class MyQueue {

    int [] elements;

    public MyQueue(){
        elements = new int [0];
    }
    //入队
    public void add(int element){
        int [] element2 = new int[elements.length+1];

        for(int i = 0;i<elements.length ;i++){
            element2[i] = elements[i];
        }
        element2[elements.length] = element;

        elements = element2 ;
    }

    //出队
    public int poll(){

        int poll_target = elements[0];

        int [] element2 = new int[elements.length-1];

        for(int i  =1 ;i<elements.length;i++){
            element2[i-1] = elements[i];
        }
        elements  = element2;

        return poll_target;

    }

    ///展现数组中的元素
    public void show(){
        System.out.println(Arrays.toString(elements));
    }

}

单链表

单链表的基本操作: 

package dataStructure;

public class Node {

    //节点内容
    int data ;
    //下一个节点
    Node next;

    public Node(int data){
        this.data = data;
    }
//
//    //为节点追加节点
//    public void append(Node n){
//        this.next = n;
//    }
    public Node append(Node n){
        //当前节点
        Node CurrentNode = this;
        while (true){
            Node NextNode = CurrentNode.next;
            if(CurrentNode.next == null){
                break;
            }
            CurrentNode = NextNode;
        }
        CurrentNode.next = n;

        return this;
    }

    //获取下一个节点
    public Node next(){
        return this.next;
    }

    public int getData(){
        return this.data;
    }

    //当前节点是否为最后一个节点
    public boolean isLast(){
        Node CurrentNode = this;
        if(this.next==null){
            return true;
        }else{
            return false;
        }
    }
}

单链表的增加与删除:

package dataStructure;

public class Node {

    //节点内容
    int data ;
    //下一个节点
    Node next;

    //有参数的构造方法
    public Node(int data){
        this.data = data;
    }

    //在节点之后添加一个节点
    public Node append(Node n){
        //当前节点
        Node CurrentNode = this;
        while (true){
            Node NextNode = CurrentNode.next;
            if(CurrentNode.next == null){
                break;
            }
            CurrentNode = NextNode;
        }
        CurrentNode.next = n;
        return this;
    }



    //获取下一个节点
    public Node next(){
        return this.next;
    }
    //获取节点的数据
    public int getData(){
        return this.data;
    }

    //当前节点是否为最后一个节点
    public boolean isLast(){
        Node CurrentNode = this;
        if(CurrentNode.next==null){
            return true;
        }else{
            return false;
        }
    }


    //显示节点中的所有信息:
    public void show(){
        Node CurrentNode = this;
        while (true){
            System.out.println("this is data"+CurrentNode.data );
            CurrentNode = CurrentNode.next;
            if(CurrentNode.next == null){
                System.out.println("this is data"+CurrentNode.data);
                break;
            }
        }
    }


    //删除下一个节点
    public void removeNext(){
        Node CurrentNode = this;
        Node NextNode = CurrentNode.next;
        CurrentNode.next = NextNode.next;
    }

    // 在节点之后添加一个新的节点
    public void addNext(Node n){
        //取出当前节点
        Node CurrentNote = this;
        //取出下一个节点
        Node NextNote = CurrentNote.next;
        //将新节点作为下一个节点
        this.next = n;
        //把下一个节点设置为新节点的下一个节点
        n.next = NextNote ;
    }
}

循环链表:

package dataStructure;

public class NoteLoop {
    //节点内容
    int data ;
    //如果只有一个节点,下一个节点就是自己
    NoteLoop next = this;  循环链表就是自己循环自己

    //有参数的构造方法
    public NoteLoop(int data){
        this.data = data;
    }


    //获取下一个节点
    public NoteLoop next(){
        return this.next;
    }

    //获取节点的数据
    public int getData(){
        return this.data;
    }

    //删除下一个节点
    public void removeNext(){
        NoteLoop CurrentNoteLoop = this;
        NoteLoop NextNoteloop = CurrentNoteLoop.next;
        CurrentNoteLoop.next = NextNoteloop.next;
    }

    // 在节点之后添加一个新的节点
    public void addNext(NoteLoop noteLoop){
        //取出当前节点
        NoteLoop CurrentNoteLoop = this;
        //取出下一个节点
        NoteLoop NextNoteLoop  = CurrentNoteLoop.next;
        //将新节点作为下一个节点
        this.next = noteLoop;
        //把下一个节点设置为新节点的下一个节点
        noteLoop.next = NextNoteLoop ;
    }
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值