数据结构——栈和队列

本文介绍了数据结构中的栈和队列。栈是一种后进先出(LIFO)的数据结构,常用于数制转换和表达式求值等问题。队列则是一种先进先出(FIFO)的数据结构,可用于任务调度等场景。文中详细讲解了栈和队列的逻辑结构、存储结构,以及如何用数组和链表实现它们。
摘要由CSDN通过智能技术生成

一、数据结构简介

数据结构是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合,往往同高效的检索算法和索引技术有关。“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储(物理)结构。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。

1、逻辑结构

指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后间关系,而与他们在计算机中的存储位置无关。一般分为线性和非线性两大类,或者以下四类:

  • 集合结构:数据元素之间除了“属于同一个集合”的关系之外没有其他关系。
  • 线性结构:数据元素的有序集合。数据元素之间形成一对一的关系。
  • 树型结构:树是层次数据结构,树中数据元素之间存在一对多的关系。
  • 图状结构:图中数据元素之间的关系是多对多的。

在这里插入图片描述

2、存储(物理)结构

指数据的逻辑结构在计算机存储空间中的存放形式。一般来说,一种数据结构的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序存储、链式存储、索引存储和哈希存储等

  • 顺序存储结构是指用一组连续的存储单元一次存储数据元素,数据元素之间的逻辑关系是有元素的存储位置来(隐式)表示的。
    在这里插入图片描述

  • 链式存储结构是指用一组任意的存储单元来存储数据元素,数据元素之间的逻辑关系借助于指示元素存储地址的执指针来(显示)表示。
    在这里插入图片描述

3、常见的数据结构

常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表(哈希表)等。
在这里插入图片描述

二、栈(stack)

栈是一种特殊的线性表(0个或以上相同类型的数据元素构成的有限序列),仅能在线性表的一端操作,允许操作的一端叫栈顶,不允许的叫栈底。 栈的特点是:先进后出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。
在这里插入图片描述

以java为例,要实现的栈的API如下:

public class Stack< Item> implements Iterable< Item>
Stack() —————————— 创建一个空栈
void push(Item item) ———— 添加一个元素
Item pop() —————————删除最近添加的元素
boolean isEmpty() ————— 栈是否为空
int size() ————————— 栈中的元素数量

1、 用数组实现栈

public class ArrayStack <Item>{
   
    // 栈元素的总数
    private int N = 0;
    // 存放栈元素的数组
    private Item [] items;
    public ArrayStack (int M) {
   
        items = (Item[]) new Object[M];
    }
    /**
     * @description: 向栈顶插入元素
     */
    public void push (Item item) {
   
        if (N<=items.length)
        items[N++] = item;
        else System.out.println("栈已满");
    }
    /**
     * @description: 从栈顶删除元素,并将删除的元素返回
     */
    public Item pop () {
   
        // 当栈还是空的时候, 不删除并且返回空
        if(isEmpty()) return null;
        // 保存将要被删除的元素
        Item i = items[N-1];
        // 将该元素删除
        items[N-1] = null;
        // 栈的长度减1
        N--;
        return i;
    }
    /**
     * @description: 判断栈是否为空
     */
    public boolean isEmpty () {
   
        return N == 0;
    }
      /**
     * @description: 返回栈的大小
     */
    public int size () {
   
        return N;
    }
    public static void main (String args []) {
   
        // 开始时指定栈的容量为2
        ArrayStack<Integer> stack = new ArrayStack(5);
        //ArrayStack<Integer> stack2 = new ArrayStack(5);
        // 向栈顶依次添加4个元素
        for(int i=1;i<5;i++)
        stack
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值