数据结构--线性表基本操作及其应用

【基础篇】:

1、 完成顺序表的基本操作(如输入、输出、插入操作、删除操作、查找操作等)。

代码:

package com.text2.t1;

import java.util.Scanner;

public class QueueDemo {
   
    public static void main(String[] args) {
   
        Queue queue = new Queue(100);
        char key = ' ';
        char choice = ' ';

        Scanner scanner = new Scanner(System.in);

        boolean loop = true;

        while (loop) {
   
            System.out.println("a(add):添加数据到顺序表");
            System.out.println("s(show):显示顺序表");
            System.out.println("i(insert):插入一个元素到第n个位置之后");
            System.out.println("d(delete):从顺序表中删除数据");
            System.out.println("f(find):寻找顺序表中的某个数据");
            System.out.println("e(exit):推出程序");

            key = scanner.next().charAt(0); //接收一个char类型的字符

            switch (key) {
   
                case 'a':   //a(add)
                    System.out.println("请输入一个数");
                    int value = scanner.nextInt();
                    queue.add(value);
                    break;

                case 's':   //s(show)
                    queue.show();
                    break;

                case 'i':   //i(insert)
                    int Num1;
                    int Num2;
                    System.out.println("请输入你要在第几个元素之后插入");
                    Num1 = scanner.nextInt();
                    System.out.println("请输入你要插入的数");
                    Num2 = scanner.nextInt();
                    queue.insert(Num1,Num2);
                    break;

                case 'd':   //d(delete)
                    while (true){
   
                        System.out.println("请选择删除方式,o:删除顺序表中的所有值等n的数,t:删除顺序表中第n个元素");
                        int num;
                        int num2;
                        choice = scanner.next().charAt(0);
                        if (choice == 'o'){
   
                            System.out.println("请输入你要删除的数");
                            num = scanner.nextInt();
                            queue.delete1(num);
                            break;
                        }
                        else if (choice == 't'){
   
                            System.out.println("请输入你要删除顺序表中的第n个元素");
                            num2 = scanner.nextInt();
                            queue.delete2(num2);
                            break;
                        }
                        else {
   
                            System.out.println("输入有误,请重新输入");
                        }
                    }
                    break;

                case 'f':   //f(find)
                    System.out.println("请输入你要查找的数");
                    int num = scanner.nextInt();
                    queue.find(num);
                    break;

                case 'e':   //e(exit)
                    scanner.close();
                    loop = false;
                    break;

                default:
                    break;
            }
        }
        System.out.println("程序已退出");
    }
}

class Queue {
   
    private int maxSize;    //表示数组的最大容量
    private int front;  //队列头
    private int rear;   //队列尾
    private int[] arr;  //该数组用于存放数据模拟的队列

    //创建队列的一个构造器
    public Queue(int arrMaxSize) {
   
        maxSize = arrMaxSize;
        arr = new int[maxSize];
        front = -1; //指向队列头部,分析出front是指向队列头的前一个位置
        rear = -1;  //指向队列尾部,指向队尾的数据(即:就是队列的最后一个数据)
        //front = -1 --> front先指向数组的第一个元素arr[0]的前一个,即,当front = 0 时对应的是a[0]
        //一开始队列为空,所以令rear = front = -1
    }

    //判断队列是否满
    public boolean isFull() {
   
        return rear == maxSize - 1;
    }

    //判断队列为空
    public boolean isEmpty() {
   
        return rear == front;
    }

    //添加数据到队列   a(add)
    public void add(int n) {
   
        //判断队列是否满
        if (isFull()) {
   
            System.out.println("队列满");
            return;
        }
        rear++;     //若队列没有满,往里加数据,队列尾往后去一位
        arr[rear] = n;
    }

    //显示队列的所有数据
    public void show() {
   
        //遍历
        if (isEmpty()) {
   
            System.out.println("队列是空的");
            return;
        }
        for (int i = 0; i < arr.length; i++) {
   
            if (arr[i] != 0){
   
                System.out.printf("arr[%d]=%d\n", i, arr[i]);
            }
        }
    }

    public void insert(int num1, int num2){
   
        if (isFull()){
   
            System.out.println("顺序表已经满了,无法再插入数据");
        }
        for (int i = rear+1; i >= num1; i--){
      //将最后一个元素的后一位得它的前一位的值
            arr[i] = arr[i-1];
        }
        arr[num1] = num2;
    }

    public void delete1(int num) {
      //删除顺序表中所有等于num的数字
        if (isEmpty()) {
   
            System.out.println("顺序表是空的");
            return;
        }
        boolean loop1 = true

你可能感兴趣的:(java,数据结构,队列,链表)