JavaSE 栈和队列

news2024/11/26 8:51:52

目录

  • 1 栈 Stack
    • 1.1 概念
    • 1.2 实现
    • 1.3 Stack常见方法的使用
    • 1.4 前、中、后缀表达式
  • 2 队列 Queue
    • 2.1 概念
    • 2.2 实现
    • 2.3 循环队列
    • 2.4 双端队列
  • 3 Java中的栈和队列
  • 4 练习题
    • 4.1 括号匹配问题
    • 4.2 用队列实现栈
    • 4.3 用栈实现队列
    • 4.4 实现一个最小栈
    • 4.5 设计循环队列

1 栈 Stack

1.1 概念

栈: 一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则,即先进后出原则。
压栈: 栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈: 栈的删除操作叫做出栈。出数据在栈顶。
在这里插入图片描述

1.2 实现

  1. 利用顺序表实现,即使用尾插 + 尾删的方式实现。
  2. 利用链表实现,则头尾皆可。

相对来说,顺序表的实现上要更为简单一些,所以我们优先用顺序表实现栈。具体实现代码如下所示:
MyStack.java

/*
* 类加载器:加载类的时候,不同的类加载器加载对应的类。
*      双亲委派模型
*      3个
* */
public class MyStack {
    private int[] elem;
    private int top;//既可以代表下标:这个位置就是当前可以存放数据的下标
    // 也可以代表当前有多少个元素

    public MyStack(){
        this.elem = new int[10];
    }
    public boolean isFull(){
        return this.top == this.elem.length;
    }
    public int push(int item){
        if(isFull()){
            //return -1;
            throw new  RuntimeException("栈为满");
        }
        this.elem[this.top] = item;
        this.top++;
        return this.elem[this.top-1];
    }
    //弹出栈顶元素,并且删除
    public int pop(){
        if(empty()){
            //return -1;
            throw new  RuntimeException("栈为空");
        }
        this.top--;
        return this.elem[this.top];

    }
    //拿到栈顶元素不删除
    public int peek(){
        if(empty()){
            //return -1;
            throw new  RuntimeException("栈为空");
        }
        return this.elem[this.top-1];
    }
    public boolean empty(){
        return this.top == 0;
        //return size() == 0;
    }
    public int size(){
        return this.top;
    }
}

TestDemo.java

public class TestDemo {
    public static void main(String[] args) {
        MyStack myStack = new MyStack();
        myStack.push(1);
        myStack.push(2);
        myStack.push(3);
        myStack.push(1);
        myStack.push(2);
        myStack.push(3);
        System.out.println(myStack.peek());//3
        System.out.println(myStack.pop());//3
        System.out.println(myStack.peek());//2
        System.out.println(myStack.pop());//2
        System.out.println(myStack.pop());//1
        System.out.println(myStack.empty());//false
        System.out.println(myStack.pop());//3
    }}

但如果我们要用链表实现栈,那么入栈是头插好还是尾插好?
答案当然是头插好,因为头插法我们入栈和出栈时的时间复杂度都是1,即O(1),而尾插法我们入栈和出栈时的时间复杂度都是n,即O(n),所以头插法更好一些。

1.3 Stack常见方法的使用

具体代码示例如下所示:

package Generic;
import java.util.*;
public class TestDemo2 {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        //stack.peek() 拿到栈顶元素,但不是删除
        System.out.println(stack.peek());//3
        //stack.pop() 弹出栈顶元素
        System.out.println(stack.pop());//3
        System.out.println(stack.peek());//2
        System.out.println(stack.pop());//2
        System.out.println(stack.pop());//1
        System.out.println(stack.empty());//true
        System.out.println(stack.isEmpty());//true
        //System.out.println(stack.pop());
    }}

1.4 前、中、后缀表达式

前缀和后缀表达式都是没有括号的表达式。
前缀: 就是把运算符移到括号前面。
后缀: 就是把运算符移到括号后面。
经常在选择题中出现的一道题,中缀表达式如何转后缀表达式(逆波兰式)?例如我们如何将A+B*(C-(D+F)) /E这个中缀表达式转成后缀表达式?
解:(1)我们在运算过程中依旧遵循“先乘除后加减”的原则给A+B*(C-(D+F)) /E这个中缀表达式带上所有运算步骤的括号,最后得到的结果是(A+((B*(C-(D+F))) /E))。
(2)根据后缀表达式规则将运算符移到所对应括号后面,得到的结果是(A((B(C(DF)+)-)*E)/)+。
(3)将所有括号去掉得到最终结果 ABCDF+ - *E/+。

具体解题过程如下图所示:在这里插入图片描述
计算机一般,对计算前缀和后缀表达式比较容易。
如何解释这句话呢?例如1+2*(4-(1+2))/2 这个中缀表达式转为后缀表达式则就是12412+ - *2/+,我们此时此时如果遇到的只要是数字则把数字依次放入栈中,遇到符号则把栈顶两个数字弹出,先弹出的数字是符号的右操作符,下一个弹出的则是符号的左操作符,将运算结果又放入栈中,依次循环直到整个表达式运算结束。具体过程可借助下图进行理解:在这里插入图片描述

2 队列 Queue

2.1 概念

队列: 只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 的原则,即队尾进,队头出。
入队列: 进行插入操作的一端称为队尾(Tail/Rear)。
出队列: 进行删除操作的一端称为队头(Head/Front)。
优先级队列(PriorityQueue): 底层是二叉树来存储元素,但具备队列的特性。
双端队列(Deque): 底层是双向链表,但也具备队列的特性。在这里插入图片描述

2.2 实现

队列也可以用数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。我们可以借助下图对利用单链表实现队列时的尾插头删法进行一个理解:在这里插入图片描述
用单链表实现一个队列的具体实现代码如下所示:
MyQueue.java

package queuedemo;
/*
* 用一个单链表实现的尾插和头删队列,时间复杂度都为1,即O(1)。
* 用一个单链表实现的头插插和尾删队列,头插时间复杂度依旧为1,即O(1);而尾删时间复杂度为n,即O(n)。
* 所以单链表实现时一般用的都是尾插头删法。
* 下面这部分是用单链表实现的一个队列
* */
class Node{
    public int val;
    public Node next;

    public Node(int val){
        this.val = val;
    }
}
public class MyQueue {
    public Node first;//头
    public Node last;//尾

    //添加元素
    public boolean offer(int val){
        Node node = new Node(val);
        if(this.first == null){
            this.first = node;
            this.last = node;
        }else{
            this.last.next = node;
            this.last = node;
        }
        return true;
    }

    //弹出元素
    public int poll() throws RuntimeException {
        if(isEmpty()){
            throw new RuntimeException("队列为空");
        }
        int ret = this.first.val;
        this.first = this.first.next;
        return ret;
    }

    //拿到队头元素,但不删除
    public int peek() throws RuntimeException {
        if(isEmpty()){
            throw new RuntimeException("队列为空");
        }
        return this.first.val;
    }

    //判断目前队列(也就是这里的链表)是否为空
    public boolean isEmpty(){
        if(this.last==null && this.first==null){
            return true;
        }
        return false;
    }
}

TestQueue.java

package queuedemo;
public class TestQueue {
    public static void main(String[] args) {
        MyQueue myQueue = new MyQueue();
        myQueue.offer(1);
        myQueue.offer(2);
        myQueue.offer(3);
        System.out.println(myQueue.peek());
        System.out.println(myQueue.poll());
    }
}

2.3 循环队列

2.2节我们提到过,使用数组的结构,出队列在数组头上出数据,效率会比较低,但其实实际中我们有时还会使用一种队列叫循环队列。如操作系统课程讲解生产者消费者模型时可以就会使用循环队列。环形队列通常使用数组实现,环形队列如下图所示:
在这里插入图片描述
但在利用数组实现循环队列(又名环形队列)时,我们会遇到如下图所示的两个问题:
在这里插入图片描述
问题一: front和rear相遇时,队列到底是空还是满?
解:这个时候我们通常牺牲一个空间来判断队列是否是满的,即判断当前rear的下一个是否是front。具体可借助下图进行理解:在这里插入图片描述
问题二: front和rear都会面临加1越界问题,即当前rear或front指向标号为7的位置时,我们对其进行加1操作,它们怎么指向标号为0的位置呢?
解:我们通常会利用式子:(rear +1)% len == front 来进行解决这个问题。例如:(7+1)% 8 = 0。
数组下标循环的小技巧:

  1. 下标最后再往后(offset 小于 array.length): index = (index + offset) % array.length。具体可借助下图进行理解:在这里插入图片描述
  2. 下标最前再往前(offset 小于 array.length): index = (index + array.length - offset) % array.length。具体可借助下图进行理解:在这里插入图片描述

用数组设计实现一个循环队列的题目链接为:https://leetcode.cn/problems/design-circular-queue/。具体实现代码如下所示:

package queuedemo;

public class MyCircularQueue {
    private int front;
    private int rear;//代表当前存放数据元素的下标
    private int[] elem;

    public MyCircularQueue(int k) {
        this.elem = new int[k+1];
        this.front = 0;
        this.rear = 0;
    }

    //入队
    public boolean enQueue(int value) {
        if(isFull()){
            return false;
        }
        //放到数组的rear下标,rear往后走
        this.elem[this.rear] = value;
        this.rear = (this.rear+1) % this.elem.length;
        return true;
    }

    //出队
    public boolean deQueue() {
        if(isEmpty()){
            return false;
        }
        //只需要挪动front这个下标就好了
        this.front = (this.front+1) %  this.elem.length;
        return true;
    }

    //得到队头元素
    public int Front() {
        if(isEmpty()){
            return -1;
        }
        int ret = this.elem[this.front];
        return ret;
    }

    //得到队尾元素
    public int Rear() {
        if(isEmpty()){
            return -1;
        }
        int index = -1;
        if(this.rear == 0){
            index = this.elem.length-1;
        }else{
            index = this.rear-1;
        }
        return this.elem[index];
    }

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

    //判断队列是否为满
    public boolean isFull() {
        return (this.rear+1)%this.elem.length == this.front;
    }
}

2.4 双端队列

双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,deque 是 “double ended queue” 的简称。那就说明元素可以从队头出队和入队,也可以从队尾出队和入队。

3 Java中的栈和队列

在这里插入图片描述
Stack:

方法解释
E push(E item)压栈
E pop()出栈
E peek()查看栈顶元素
boolean empty()判断栈是否为空

Queue:

错误处理抛出异常返回特殊值
入队列add(e)offer(e)
出队列remove()poll()
队首元素element()peek()

Deque:

头部/尾部头部元素(队首尾部元素(队尾)
错误处理抛出异常返回特殊值抛出异常返回特殊值
入队列addFirst(e)offerFirst(e)addLast(e)offerLast(e)
出队列removeFirst()pollFirst()removeLast()pollLast()
获取元素getFirst()peekFirst()getLast()peekLast()

4 练习题

4.1 括号匹配问题

题目链接为:https://leetcode.cn/problems/valid-parentheses/
解题思路:

考虑把左括号放进栈中去,如果遇到右括号,则拿到栈顶元素,看栈顶元素是否和当前的字符(右括号)匹配,如果匹配,当前栈顶元素出栈,最后看栈是否为空即可判断出字符串是否有效。

具体实现代码如下所示(同时注意在牛客网写代码时要import包,但力扣不用导包):

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for(int i = 0;i < s.length();i++){
            char ch = s.charAt(i);
            if(ch == '(' || ch == '[' || ch == '{'){
                //说明当前遍历到的字符是左括号
                stack.push(ch);
            }else{
                //1、判断当前的栈是否是空的
                if(stack.empty()){
                    System.out.println("右括号多");
                    return false;//代表右括号多
                }
                //2、拿到栈顶元素,看栈顶元素是否和当前的字符匹配,如果匹配当前栈顶元素出栈
                char topch = stack.peek();
                if(topch == '{' && ch == '}' || topch == '[' && ch == ']' || topch == '(' && ch == ')'){
                    stack.pop();
                }else{
                    System.out.println("左右括号不匹配");
                    return false;//代表左右括号不匹配
                }
            }
        }
        if(!stack.empty()){
            System.out.println("左括号多");
            return false;//代表左括号多
        }
        return true;
    }
}

4.2 用队列实现栈

题目链接为:https://leetcode.cn/problems/implement-stack-using-queues/
具体实现代码如下所示:

class MyStack {
    private Queue<Integer> qu1 = new LinkedList<>();
    private Queue<Integer> qu2 = new LinkedList<>();

    public MyStack() {
        
    }
    
    public void push(int x) {
        //谁不为空入到哪个队列当中
        if(!qu1.isEmpty()){
            qu1.offer(x);
        }else if(!qu2.isEmpty()){
            qu2.offer(x);
        }else{
            qu1.offer(x);//指定存放到了qu1 
        }
    }
    
    public int pop() {
        if(empty()){
            return -1;
        }
        //每次出不为空的队列,出size-1个到另外一个为空的队列,最后弹出剩余的那一个元素
        if(!qu1.isEmpty()){
            int size = qu1.size();
            for(int i = 0;i < size -1;i++){
                qu2.offer(qu1.poll());
            }
            return qu1.poll();
        }else{
            int size = qu2.size();
            for(int i = 0;i < size -1;i++){
                qu1.offer(qu2.poll());
            }
            return qu2.poll();
    }
    
    public int top() {
        if(empty()){
            return -1;
        }
        //每次出不为空的队列,出size-1个到另外一个为空的队列,最后弹出剩余的那一个元素
        if(!qu1.isEmpty()){
            int size = qu1.size();
            int cur = -1;
            for(int i = 0;i < size;i++){
                cur = qu1.poll();
                qu2.offer(cur);
            }
            return cur;
        }else{
            int size = qu2.size();
            int cur = -1;
            for(int i = 0;i < size;i++){
                cur = qu2.poll();
                qu1.offer(cur);
            }
            return cur;   
    }
    
    //这个函数是两个队列都为空
    public boolean empty() {
        return qu1.isEmpty() && qu1.isEmpty();
    }
}

这里我们用的是两个队列实现栈,其实用一个队列实现栈也是可以实现的,即使用LinkedList双端队列进行实现。如果在笔试中我们为了赶时间,则可以使用LinkedList进行实现;如果是面试中,我们需要问一下出题者是否可以使用LinkedList来进行实现,如果出题者不允许,我们就要用两个队列实现栈这个方法了。

4.3 用栈实现队列

题目链接为:https://leetcode.cn/problems/implement-queue-using-stacks/
具体实现代码如下所示:

class MyQueue {
    private Stack<Integer> s1 = new Stack<>();//入队
    private Stack<Integer> s2 = new Stack<>();//出队
    public MyQueue() {

    }
    
    public void push(int x) {
        s1.push(x);
    }
    
    public int pop() {
        //两种情况:
          //1、s2为空的时候,导入全部的s1元素,弹出s2的栈顶元素
          //2、s2不为空,直接弹出栈顶元素
          if(empty()){
              return -1;
          }
          if(s2.empty()){
              while(!s1.empty()){
                  s2.push(s1.pop());
              }
          }
          if(s2.empty(){
              return -1;
          }
          return s2.pop();
    }
    
    public int peek() {
        if(empty()){
              return -1;
          }
          if(s2.empty()){
              while(!s1.empty()){
                  s2.push(s1.pop());
              }
          }
          if(s2.empty(){
              return -1;
          }
          return s2.peek();
    }
    
    public boolean empty() {
        return s1.empty() && s2.empty();
    }
}

4.4 实现一个最小栈

题目链接为:https://leetcode.cn/problems/min-stack/
注意: 题目中的常数时间意思就是O(1)。
具体实现代码如下所示:

class MinStack {
    private Stack<Integer> s1 = new Stack<>();
    private Stack<Integer> minStack = new Stack<>();
    public MinStack() {

    }
    
    public void push(int val) {
        s1.push(x);
        if(minStack.empty()){
            minStack.push(x);
        }else{
            if(x <= minStack.peek()){
                minStack.push(x);
            }
        }
    }
    
    public void pop() {
        int x = s1.pop();
        if(x == minStack.peek()){
            minStack.pop();
        }
    }
    //这个和最小栈没有关系
    public int top() {
        return s1.peek();
    }
    
    public int getMin() {
        return minStack.peek();
    }
}

4.5 设计循环队列

该题目就是前面2.3节当中的用数组设计实现一个循环队列,具体解题代码也在前面2.3节当中可以查看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1048280.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LIMS实验室信息管理系统源码 基于计算机的数据处理技术、数据存储技术、网络传输技术、自动化仪器分析技术于一体

LIMS 是一个集现代化管理思想与基于计算机的数据处理技术、数据存储技术、网络传输技术、自动化仪器分析技术于一体&#xff0c;以实验室业务和管理工作为核心&#xff0c;遵循实验室管理国际规范&#xff0c;实现对实验室全方位管理的信息管理系统。 LIMS将样品管理、数据管理…

前端利用策略模式优化if else

策略模式 策略模式定义了一系列算法,并将每种算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。 策略模式优化if else 策略模式可以用来代替多重if else语句。 Vue中使用策略模式 我们以一个表单验证的例子来看看如何使用策略模式优化if else。 methods:…

一文让你搞懂async/await存在时的执行顺序

最近在写项目&#xff0c;发现代码中总出现这样的内容&#xff0c;一直百思不得其解&#xff0c;后来同事说这段代码的意义是把后边的任务变成宏任务执行&#xff0c;这我更迷惑了&#xff0c;我发现自己的Promise基础还是很差&#xff0c;因此在摸索了几天后&#xff0c;感觉好…

SAP ABAP内部单位外部单位转换问题

之前没有留意&#xff0c;用户用了那么久也没有发现&#xff0c;今天用户找过来说他在前台维护的是PC&#xff0c;但是报表里面显示是ST。 看了一下原来这里的“内部度量单位”就是内部的、与语言无关的计量单位格式&#xff08;ST&#xff09;。该内部格式在输出到屏幕之前&a…

完整指南:如何使用 Node.js 复制文件

文件拷贝指的是将一个文件的数据复制到另一个文件中&#xff0c;使目标文件与源文件内容一致。Node.js 提供了文件系统模块 fs&#xff0c;通过该模块可以访问文件系统&#xff0c;实现文件操作&#xff0c;包括拷贝文件。 Node.js 中文件拷贝方法 在 Node.js 中&#xff0c;有…

竞赛选题 大数据商城人流数据分析与可视化 - python 大数据分析

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据的基站数据分析与可视化 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度…

Postgresql源码(114)视图权限授予逻辑

0 速查 被授权的对象在系统表中记录授权信息&#xff0c;例如pg_namespace中的nspacl列&#xff1a; {mingjieUC/mingjie,UC/mingjie,pusr1UC/mingjie}pusr1UC/mingjie的含义&#xff1a; mingjie是赋予者pusr1是被赋予者UC是权限&#xff0c;表示USAGE和CREATE 1 视图权限…

@SpringBootApplication注解的理解——如何排除自动装配 分布式情况下如何自动加载 nacos是怎么被发现的

前言 spring作为主流的 Java Web 开发的开源框架&#xff0c;是Java 世界最为成功的框架&#xff0c;持续不断深入认识spring框架是Java程序员不变的追求。 本篇博客介绍SpringBootApplicant注解的自动加载相关内容 其他相关的Spring博客文章列表如下&#xff1a; Spring基…

ubuntu20.04 jammy 安装ros2

ubunut22.04 jammy&#xff08;5.15&#xff09; ros2版本: humble 安装参考&#xff1a; Ubuntu (Debian packages) — ROS 2 Documentation: Humble documentationl 按照官方给的操作指南进行操作即可&#xff0c;到安装软件包的时候&#xff0c;若只为开发&#xff0…

C++中实现雪花算法来在秒级以及毫秒及时间内生成唯一id

1、雪花算法原理 雪花算法&#xff08;Snowflake Algorithm&#xff09;是一种用于生成唯一ID的算法&#xff0c;通常用于分布式系统中&#xff0c;以确保生成的ID在整个分布式系统中具有唯一性。它的名称来源于雪花的形状&#xff0c;因为生成的ID通常是64位的整数&#xff0…

【小白专属02】SpringBoot集成MybatisPlus

目录 前言 一、添加依赖项 二、配置数据库连接信息 三、数据库创建表 四、创建实体表 五、编写Mapper接口 六、功能测试 前言 上节回顾 上一节我们对SpringBoot框架进行了搭建&#xff0c;其实按照流程走问题不大。最主要的部分我们把下载SpringBoot demo的网址换成了…

编程每日一练(多语言实现)基础篇:百元买百鸡

文章目录 一、实例描述二、技术要点三、代码实现3.1 C 语言实现3.2 Python 语言实现3.3 Java 语言实现3.4 JavaScript 语言实现 一、实例描述 中国古代数学家张丘建在他的 《算经》 中提出了一个著名的 "百钱买百鸡问题"&#xff0c; 鸡翁一&#xff0c;值钱五&…

重新定义旅行,AnyGo for Mac让你畅享虚拟GPS位置的无限可能!

旅行是一种令人兴奋和激动人心的体验&#xff0c;而现在有了AnyGo for Mac这款强大的虚拟GPS位置工具&#xff0c;你将能够重新定义旅行&#xff0c;尽情探索全新的地理环境和体验&#xff01; AnyGo for Mac为你带来了全新的旅行方式。无需离开家门&#xff0c;你就可以通过模…

基于php的物流信息公共平台设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于php的物流信息公共平…

面对海量数据挑战,企业怎样进行数据处理?

海量数据给企业带来机遇的同时&#xff0c;也给企业带来了一定的挑战。怎样高效处理海量数据也是成为了企业面临的重要问题。 一&#xff1a;数据采集 数据采集是数据处理的第一步。企业需要进行数据采集&#xff0c;但是要保证数据的准确性以及安全性。同时需要注意&#xf…

PgSQL-向量数据库插件-lantern

PgSQL-向量数据库插件-lantern 即pgvector、pg_embedding 后又一向量数据库扩展Lantern问世了。当然也为向量列提供了hnsw索引以加速ORDER BY... LIMIT查询。Lantern使用usearch实现hnsw。 使用方法 保留了标准PgSQL接口&#xff0c;兼容其生态工具。首先需要安装该插件&#x…

服务器基础知识:raid卡有什么优势?

当今直播电商、短视频呈现热火朝天的趋势&#xff0c;是近两年的商业热门议题&#xff0c;以淘宝天猫、拼多多、抖音、小红书、视频号为代表的平台数据量呈现爆炸性的增长。据IDC预测&#xff0c;2025年全球数据总量将增至175ZB&#xff08;1ZB1万亿GB&#xff09;&#xff0c;…

数字电视码流分析仪通用规范

声明 本文是学习GB-T 26274-2010 数字电视码流分析仪通用规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了数字电视码流分析仪(以下简称码流分析仪)的技术要求、试验方法、检验规则及标 志、包装、运输、贮存等。 本标准适…

C++代码示例:组合数简单生成工具

文章目录 前言代码仓库内容代码&#xff08;有详细注释&#xff09;编译和运行命令结果总结参考资料作者的话 前言 C代码示例&#xff1a;组合数简单生成工具。 代码仓库 yezhening/Programming-examples: 编程实例 (github.com)Programming-examples: 编程实例 (gitee.com) …

echarts 折线组件

echarts 折线组件 <template><div class"lineChartsTemplate" :id"chartsId"></div> </template><script> export default {name: "lineChartsTemplate",components: {},props: {xData: {type: Array,default: ()…