Java自定义线性表,栈,队列

1.线性表的定义

package day8_2;

import java.util.Arrays;

public class MyArraysList {
    public Object [] objects;
    public int size;
    public int capacity;

    public MyArraysList(){
        this.capacity = 5;
        objects = new Object[this.capacity];
    }

    public MyArraysList(int capacity){
        this.capacity = capacity;
        objects = new Object[this.capacity];
    }

    @Override
    public String toString() {
        return "MyArraysList{" +
                "objects=" + Arrays.toString(objects) +
                ", size=" + size +
                ", capacity=" + capacity +
                '}';
    }

    //添加元素
    public  void add(Object o){
        //判断线性表是否满了
        if (isFull()){
            //如果满了就进行扩容
            dilatation();
        }
        objects[size++] = o;
    }
    //扩容操作
    private void dilatation() {
        int newcapacity = this.capacity * 2;
        Object [] newobject = Arrays.copyOf(this.objects,newcapacity);
        for (int i = 0; i < this.size; i++){
            newobject[i] = objects[i];
        }
        this.objects = newobject;
        this.capacity = newcapacity;
    }
    //判断是否为空
    private  boolean isFull() {
        return this.size == this.capacity;
    }
    //移除线性表对应下标的值
    public void remove(int index){
        for (int i = index; i < size - 1; i++){
            this.objects[index] = this.objects[index + 1];
        }
        this.size--;
    }
    //获取对应下标的值
    public Object get(int index){
        return objects[index];
    }
    //获取线性表的长度
    public int getSize(){
        return size;
    }
    //设置对应的下标的值
    public void setObjects(int index,Object o){
        if (index < 0 ||index > size){
            System.out.println("设置下标不在有效范围!");
        }
        objects[index] = o;
    }
    //在对应下标插入对应的值
    public void Insert(int index,Object o){
        if (index < 0 ||index > size){
            System.out.println("插入的下标不在有效范围!");
        }
        if (isFull()){
            dilatation();
        }
        for (int i = size; i > index; i--) {
            objects[i] = objects[i - 1];
        }
        objects[index] = o;
        size++;
    }

   public void Delete(int index){
       if (index < 0 ||index > size){
           System.out.println("删除的下标不在有效范围!");
       }
       for (int i = index; i < size - 1; i++) {
           objects[i] = objects[i + 1];
       }
       size--;
   }

}

以下是测试代码:

package day8_2;

public class TestMyArraysList {
    public static void main(String[] args) {
        MyArraysList myArraysList = new MyArraysList();
        myArraysList.add(123);
        myArraysList.add(456);
        myArraysList.add("ABC");
        myArraysList.add("DEF");
        myArraysList.add("D");
        myArraysList.add("E");
        System.out.println(myArraysList);
        System.out.println(myArraysList.size);
        System.out.println(myArraysList.get(3));
        System.out.println(myArraysList.getSize());
        myArraysList.Delete(1);
        System.out.println(myArraysList);
        myArraysList.Insert(1,666);
        System.out.println(myArraysList);
        myArraysList.add(777);
        myArraysList.add(888);
        myArraysList.add(999);
        myArraysList.add(520);
        myArraysList.add(1314);
        myArraysList.add("七夕节快乐!");
        System.out.println(myArraysList);
        myArraysList.setObjects(11,"情人节快乐!");
        System.out.println(myArraysList);
        myArraysList.remove(1);
        System.out.println(myArraysList);
    }
}

/*
MyArraysList{objects=[123, 456, ABC, DEF, D, E, null, null, null, null], size=6, capacity=10}
6
DEF
6
MyArraysList{objects=[123, ABC, DEF, D, E, E, null, null, null, null], size=5, capacity=10}
MyArraysList{objects=[123, 666, ABC, DEF, D, E, null, null, null, null], size=6, capacity=10}
MyArraysList{objects=[123, 666, ABC, DEF, D, E, 777, 888, 999, 520, 1314, 七夕节快乐!, null, null, null, null, null, null, null, null], size=12, capacity=20}
MyArraysList{objects=[123, 666, ABC, DEF, D, E, 777, 888, 999, 520, 1314, 情人节快乐!, null, null, null, null, null, null, null, null], size=12, capacity=20}
MyArraysList{objects=[123, ABC, ABC, DEF, D, E, 777, 888, 999, 520, 1314, 情人节快乐!, null, null, null, null, null, null, null, null], size=11, capacity=20}
*/

2.栈的定义

package day8_2;

import java.util.Arrays;
import java.util.Objects;

/*
栈的的定义
 */
public class Stack {
    //创建容器来存储元素
    private  Object [] data;
    //容器现在元素的个数
    private int size;
    //容器的容量
    private int capacity;
    //创建一个默认容量为10的容器
    public Stack(){
        this.capacity = 10;
        data = new Object[this.capacity];
    }
    //创建指定容量的容器
    public Stack(int n){
        data = new Object[n];
    }
    //将一个元素存储到容器中
    public void push(Object e){
        //判断栈是否满了
        if (this.isFull()){
            this.resize(2 * this.capacity);
        }else {
            this.data[size++] = e;
        }

    }
    //如果容器内的个数等于容量,则认定为容器满了
    private boolean isFull(){
        return this.capacity == this.size;
    }
    //对容器的容量进行扩容
    private void resize(int len){
//        Object[] arr = new Object[len];
//        for(int i = 0; i < data.length; i ++){
//            arr[i] = data [i];
//        }
        this.data = Arrays.copyOf(this.data,len);
        this.capacity = len;
    }

    public Object pop(){
        if (this.isEmpty()){
            // System.out.println("栈为空!!!");
            throw new RuntimeException("栈为空!!!");
        }
        return this.data[--this.size];
    }

    private boolean isEmpty() {
        return this.size == 0;
    }

    public Object peek(){
        return this.data[size-1];
    }

    public int size(){
        return this.size;
    }

    public void clear(){
        this.size = 0;
    }

    @Override
    public String toString() {
        return Arrays.toString(Arrays.copyOf(this.data,this.size));
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Stack stack = (Stack) o;
        return size == stack.size && capacity == stack.capacity && Arrays.equals(data, stack.data);
    }

}

以下是测试代码:

//测试
    public static void main(String[] args) {
        Stack stack = new Stack();
        System.out.println(stack);
        stack.push("lele");
        stack.push(1999);
        stack.push(666);
        System.out.println(stack);
        System.out.println(stack.size());
        System.out.println(stack.isEmpty());
        System.out.println(stack.isFull());
        System.out.println(stack.peek());
        System.out.println(stack.pop());
        System.out.println(stack.peek());
        System.out.println(stack);
        stack.clear();
        System.out.println(stack.isEmpty());
        System.out.println(stack);
    }


/*
[]
[lele, 1999, 666]
3
false
false
666
666
1999
[lele, 1999]
true
[]
*/

3.队列的定义

package day8_2;

import java.util.Arrays;

public class myQueue {

        private Object[] data;
        private int size;
        private int capacity;

        public myQueue() {
            this.capacity = 10;
            data = new Object[this.capacity];
        }

        public myQueue(int capacity) {
            this.capacity = capacity;
            data = new Object[this.capacity];
        }

        //进队列一个元素
        public void push(Object e){
            // 判断队列是否已满
            if (this.isFull()) {
                // 扩容
                int length = this.capacity + (this.capacity >>> 1);
                this.resize(length);
            } else {
                this.data[size++] = e;
            }
        }

        // 判断是否存满
        private boolean isFull() {
            return this.capacity == this.size;
        }

        // 扩容或缩容容器的大小
        private void resize(int len){
            this.data = Arrays.copyOf(this.data, len);
            this.capacity = len;
        }

        // 判断队列是否为空
        public boolean isEmpty(){
            return this.size == 0;
        }

        // 出队列一个元素
        public Object pop(){
            if (this.isEmpty()) {
                throw new RuntimeException("队列中已经没有元素!");
            }
            this.size--;
            Object temp = this.data[0];
            System.arraycopy(data, 1, this.data, 0, data.length - 1);
            return temp;
        }

        // 获取队列中元素的个数
        public int size(){
            return this.size;
        }

        // 清空队列
        public void clear(){
            this.size = 0;
        }

        // 返回队列的字符串形式
        public String toString(){
            return Arrays.toString(Arrays.copyOf(this.data, this.size));
        }

        // 对比两个队列是否相等
        @Override
        public boolean equals(Object o)	{
            myQueue s = (myQueue) o;
            if (this.size != s.size()) {
                return false;
            }
            for (int i = 0; i < s.size() ; i++) {
                if (data[i] != s.data[i]) {
                    return false;
                }
            }
            return true;
        }

    public static void main(String[] args) {
        myQueue mq = new myQueue();

    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值