栈、队列(自定义队列)、数组

一、栈

1.基本概念
1.1定义:堆栈是一种特殊的线性表,它的操作被限制在某一端,即栈顶。习惯上称插入结点为入栈(压栈,进栈),删除结点成为出栈(弹栈),有先进后出的特点。
1.2基本操作
这里写图片描述
2.栈的顺序存储结构
2.1出栈和入栈变化
这里写图片描述
2.2 *base指针始终指向栈底位置,取值保持不变,若base==null,则说明栈结构不存在;*top为栈顶指针,其初始值指向栈底,删除栈顶元素时top-1,插入新的元素时top+1,因此,非空栈的栈顶指针始终指向当前栈顶元素的下一个位置。

二、队列

1.队列也是一种特殊类型的线性表,按照先进先出的原则对其中的元素进行操作。排在队首的先出队,然后后面的元素依次前移。进入队列必须在队尾进行,删除必须在队首进行。
2.基本操作
这里写图片描述
3.队列的顺序存储结构
这里写图片描述
问题:队列不可再继续插入新的队尾元素,但是队列实际可用空间并未占满,如上图(d)所示。
方案:将顺序队列打造成为一个环状的空间。利用的技术:取余,将地址连续的存储单元首尾相连,形成一个环路,同时为了区分空队和满队,空出一个单元不用。
4.java自定义队列实现增删查改(crud)

public class MyList {

    private int size = 0;// 长度
    private int[] ages = new int[size];
    public int getSize() {
        return size;
    }


//增加 (Create);在最后增加
-------------------

    public boolean add(int age) {

        try {
            // 新开辟一个空间
            int[] ages_new = new int[size + 1];
            // 拷贝原始数据
            for (int i = 0; i < size; i++) {
                ages_new[i] = ages[i];
            }
            // 赋值新数据
            ages_new[size] = age;
            // 长度加1
            size++;
            // 指向新开的空间
            ages = ages_new;
            return true;
        } catch (Exception e) {

            return false;
        }

    }
    //在指针位置添加
    public boolean insert(int index, int age) {

        // 新开辟一个空间
        int[] ages_new = new int[size + 1];
        // 拷贝原始数据
        for (int i = 0; i < index; i++) {
            ages_new[i] = ages[i];
        }

        // 拷贝后面的数据
        for (int i = index + 1; i < size + 1; i++) {
            ages_new[i] = ages[i - 1];
        }

        // 赋值新数据
        ages_new[index] = age;
        // 长度加1
        size++;
        // 指向新开的空间
        ages = ages_new;
        return true;

    }


//删除 (Delete)
-------------

    public boolean delete(int index) {
        // 新开辟一个空间
        int[] ages_new = new int[size - 1];
        // 拷贝前面的数据
        for (int i = 0; i < index; i++) {
            ages_new[i] = ages[i];
        }

        // 拷贝后面的数据
        for (int i = index + 1; i < size; i++) {
            ages_new[i - 1] = ages[i];
        }
        // 长度--
        size--;
        // 指向新开的空间
        ages = ages_new;
        return true;
    }


//查询 (Retrieve) (重新得到数据)
------------------------

    public int get(int index) {
        return ages[index];
    }

//更新 (Update)
-------------

    public boolean update(int index, int age) {
        try {

            ages[index] = age;
            return true;
        } catch (Exception e) {

            return false;
        }
    }
}

5.由实现方法易知队列是基于数组实现的;
好处:长度可变,提供插入的功能;
缺点:插入比较麻烦。

三、数组

1.优点:查询(访问)快:index 索引,角标;
2.缺点:长度死-》不能插入
3. 一维数组定义的语法格式:
1.类型名[] 数组名 = new 类型名[数组长度];
2.类型名[] 数组名 = new 类型名[数组长度]{数据元素值};
int[] ages = { 19 };
int[] ages2 = new int[8];
int[] ages3 = new int[] { 21 };

4.二维数组:
4.1.二维数组实际上是一个二维表。
4. 2.二维数组可以看作是有多个一维数组构成的。
4. 3.二维数组有行和列之分。
4. 4.二维数组定义的语法格式:
  型名[][] 数组名 = new 类型名[行数][列数];

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值