java基础:14.4 栈、队列

14、栈和队列的基础与应用 本文详细介绍了栈和队列这两种基本数据结构的概念、操作及其应用场景。通过具体的代码示例和高级应用(如表达式求值、括号匹配、广度优先搜索、深度优先搜索和优先队列),帮助读者深入理解栈和队列在实际编程中的灵活运用,并提供了优化技巧和自我检测问题,以巩固所学内容。 阅读详情


可以使用数组线性表实现栈,使用链表实现队列。

栈可以看做是一种特殊类型的线性表,访问、插入和删除其中的元素只能在栈尾进行。用数组线性表来实现栈比用链表来实现实现效率更高

这里有两种办法可用来设计栈和队列的类。

  • 使用继承:可以通过继承数组线性表类ArrayList 来定义栈类,通过继承链表类LinkedList 来定义队列类。
  • 使用组合:可以将数组线性表定义为栈类中的数据域,将链表定义为队列类中的数据域,

在这里插入图片描述

这两种设计方法都是可行的,但是相比之下,组合可能更好一些,因为它可以定义一个全新的栈类和队列类,而不需要继承数组线性表类与链表类中不必要和不合适的方法。

1、栈

在这里插入图片描述
栈的典型应用

  1. 逆序输出Conversion
    输出次序与处理过程颠倒;递归深读和输出长度不易预知
  2. 递归嵌套 stack permutation + parenthesis
    具有自相似性的问题可递归描述,但分支位置和嵌套深度不固定
  3. 延迟缓冲 evaluation
    线性扫描算法模式中,在预读足够长之后,方能确定可处理的前缀
  4. 栈式计算 RPN
    基于栈结构的特定计算模式

1.1 myStack的实现

public class myStack<E> {

    private java.util.ArrayList<E> list = new java.util.ArrayList<E>();

    public void push(E e){
        list.add(e);
    }

    public E pop(){
        return list.remove(list.size()-1);
    }

    public E top(){
        return list.get(list.size()-1);
    }

    public int getSize(){
        return list.size();
    }
    
    public boolean empty(){       //if stack is empty, return true;
        if(list.size() == 0) return true;
        else return false;
    }
    @Override
    public String toString() {
        return "stack:" + list.toString();
    }
}

 

1.2 栈应用:进制转换问题

逆序输出Conversion :输出次序与处理过程颠倒;递归深读和输出长度不易预知

进制转换 输入一个数,可以转换成任意的n进制。

public class convert {

    public static void main(String []args){
        ConvertBase(-17,2);
    }

    static void ConvertBase (int num , int base){
        myStack s = new myStack();
        char digit [] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
        boolean flag = false;

        if(num < 0){
            flag = true;
            num *= -1;
        }

        while (num > 0) {
            s.push(digit[num % base]);
            num /= base;
        }

        if(flag){
            s.push('-');
        }

        for(int i = s.getSize() ; i > 0 ; i--)
            System.out.print(s.pop());
    }
}

 

1.3 栈应用:括号匹配问题

stack permutation + parenthesis
具有自相似性的问题可递归描述,但分支位置和嵌套深度不固定
括号匹配问题 :判断一个类似于“(())()()()))(((()” 是否左括号和右括号可以一一正确匹配上。

    static boolean paren(String s){
        myStack stack = new myStack();
        for(int i=0; i < s.length(); i++){
            if(s.charAt(i) == '(')  stack.push(1);
            else if(!stack.empty())  stack.pop();
            else return false;
        }
        return stack.empty();
    }

这个题在学有限自动机课程时也遇到过,同样的思路~~
 

1.4 栈应用:栈混洗问题

/*
描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。
假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,
但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

输入
第一行:输入N个整数,空格隔开,按先后顺序入栈
第二行:输入N个整数,空格隔开,表示一种出栈顺序
输出
True 或者 False ,意思是第二行数据是否是一个合法的弹出序列
样例输入
1 2 3 4 5
4 5 3 2 1
样例输出
True
*/
在这里插入图片描述

    static boolean sp(){
        Scanner in = new Scanner(System.in);
        System.out.println("enter your number");
        String s1 = in.nextLine();
        String s2 = in.nextLine();
        String a1[] = s1.split(" ");
        String a2[] = s2.split(" ");
        Stack<Integer> s = new Stack<>();

        int a[] = new int[a1.length];    //a 是压入栈的顺序 从 0--a.length
        int b[] = new int[a1.length];     // b 是弹出的顺序 从 0--b.length
        for(int i = 0;i < a.length;i++){
            a[i] = Integer.valueOf(a1[i]);
            b[i] = Integer.valueOf(a2[i]);
        }

        int k = 0;
        for(int i = 0; i < a.length; i++){
            s.push(a[i]);
            while( s.empty()==false && b[k] == s.peek()  )
            {
                s.pop();
                k++;
            }
        }
        if( k == a.length && s.empty())
            return true;
        else
            return false;
    }

 

2、队列的实现

队列,元素只能从队列的末端插入,从开始端访问和删除。由于删除是在线性表的起始位置进行的,所以用链表实现队列比用数组线性表实现效率更高。

package ReWrite;
public class GenericQueue<E> {
	
	// 队列:尾进前出
	private java.util.LinkedList<E> list = new java.util.LinkedList<E>();
	
	/**
	 * 添加一个元素到队列
	 * @param e
	 */
	public void enqueue(E e) { 
		list.addLast(e);
	}
	
	/**
	 * 从队列删除一个元素
	 */
	public E dequeue() {
		return list.removeLast();
	}
	
	
	public int getSize() {
		return list.size();
	}
	
	@Override
	public String toString() {
		return "Queue:" + list.toString();
	}
}

2、栈的实现

package ReWrite;

public class GenericStack<E> {
	
	private java.util.ArrayList<E> list = new java.util.ArrayList<E>();
	
	/**
	 * 添加一个元素到队列
	 * @param e
	 */
	public void push(E e) { 
		list.add(e);
	}
	
	/**
	 * 从队列删除一个元素
	 */
	public E pop() {
		return list.remove(list.size()-1);
	}
	
	
	public int getSize() {
		return list.size();
	}
	
	@Override
	public String toString() {
		return "stack:" + list.toString();
	}
}

3、测试

package ReWrite;

public class Test {
	public static void main(String[] args) {
		
	/*	
		GenericQueue<String> queue = new GenericQueue<String>();
		queue.enqueue("tom");
		queue.enqueue("Ali");
		queue.enqueue("Sua");
		System.out.println("(1)" + queue);
		System.out.println("(1)" + queue.dequeue());
		
	*/
		
		GenericStack<String> stack = new GenericStack<String>();
		stack.push("apple");
		stack.push("orange");
		stack.push("megon");
		System.out.println("(1)" + stack);
		System.out.println("(2)" + stack.pop());
		System.out.println("(3)" + stack.pop());
		System.out.println("(4)" + stack);

	}
}

4、优先队列

普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列( priority queue) 中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。例如,医院的急救室为病人赋予优先级,具有最高优先级的病人最先得到治疗。

可以使用堆实现优先队列,其中根结点是队列中具有最高优先级的对象。

package ReWrite;

import Sort.Heap;

public class MyPriorityQueue<E extends Comparable<E>> {
	
	private Heap<E> heap = new Heap<>();
	
	public void enqueue(E newObject) {
		heap.add(newObject);
	}
	
	public E dequeue() {
		return heap.remove();
	}
	
	public int getSize() {
		return heap.getSize();
	}
}

测试:

package ReWrite;

public class Test {
	public static void main(String[] args) {
		Patient p1 = new Patient("John",2);
		Patient p2 = new Patient("Jim",1);
		Patient p3 = new Patient("Tim",5);
		Patient p4 = new Patient("Cindy",7);
		
		MyPriorityQueue<Patient> priorityQueue = new MyPriorityQueue<>();
		priorityQueue.enqueue(p1);
		priorityQueue.enqueue(p2);
		priorityQueue.enqueue(p3);
		priorityQueue.enqueue(p4);
		
		while(priorityQueue.getSize()>0)
			System.out.println(priorityQueue.dequeue());
		

	}
	
	static class Patient implements Comparable<Patient>{
		private String name;
		private int priority;
		
		public Patient(String name, int priority) {
			this.name = name;
			this.priority = priority;
		}
		
		@Override
		public String toString() {
			return name + "(priority:" + priority + ")";
		}
		


		@Override
		public int compareTo(Patient o) {
			return this.priority - o.priority;
		}
	}
}
14、Java 中栈与队列抽象数据类型详解 本文详细介绍了 Java 中栈与队列的抽象数据类型及其应用。内容涵盖栈的后进先出特性及其在迷宫求解与生成中的应用,以及队列的先进先出特性在任务调度和数据重新排序中的使用。文章还探讨了栈和队列的不同实现方式(如数组和链表)、复杂度分析、综合应用以及优化策略,帮助读者深入理解这两种基础数据结构的设计与实际编程应用。 阅读详情

相关推荐

银河飞腾FT-M6678 DSP开发初体验:从仿真器连接到第一个网络程序(CCS5.5+FT-EMU560实战)

本文详细介绍了银河飞腾FT-M6678 DSP开发环境的搭建过程,包括CCS5.5开发环境的配置、FT-EMU560仿真器的连接与设置,以及关键模块如网络驱动的国产化替换。通过实战案例,帮助开发者快速掌握国产DSP的开发流程,实现网络通信功能。

weixin_30919429的博客 554

【数据结构与算法】List接口&栈&队列

List 接口继承自 Collection 接口,其中定义了一个用于顺序存储元素的合集,我们可以使用它的两个具体类 ArrayList 或者 LinkedList 来创建一个线性表

一以贯之的努力 不得懈怠的人生 754

第一讲:halcon模板匹配捆绑测量矩形检测芯片针脚

使用halcon模板匹配捆绑测量矩形,检测位置发生变换的芯片针脚缺陷。

uiopmn1的博客 2995

实现线性表、队列及优先队列

实现线性表: 定义一个MyList接口,继承Collection,关系如下图: 本次使用MyArrayList来实现线性表。 MyList接口 import java.util.Collection; public interface MyList<E> extends Collection<E> { public void add(int index, E e); public E get(int index); public int in

weixin_44396684的博客 411

Allegro如何画Photoplot_Outline操作指导

在用Allegro进行PCB设计的时候,最后进行光绘输出前,Photoplot_Outline是必备一个图形,所有在Photoplot_Outline中的图形将被输出,Photoplot_Outline以外的图形都将不被输出。如何绘制Photoplot_Outline,具体操作如下。如何画Photoplot_Outline操作指导。

weixin_54787054的博客 2633

电阻抗成像肺功能测试数据分析与直方图生成

本文介绍了基于MATLAB的电阻抗成像(EIT)肺功能测试数据分析方法。研究针对32×32像素的EIT图像序列,通过三步算法处理:首先计算特定时间点与谷值图像的差值,然后分析1秒后峰值与1秒值的差值,最终计算比值矩阵并处理异常值。系统展示了数据预处理、关键时间点检测、比值计算及统计分析的全流程,包括生成概率分布直方图和空间分布图等可视化方法。该分析为无创肺功能评估提供量化指标,可应用于临床呼吸监测和疾病诊断。

huanghm88的专栏 197

8.泛型继承和实现

public class Test{ public static void main(String[] args) { } } class Father<T>{ } interface ARB<E>{ } class child<T,E> extends Father<T> implements ARB<E>{ }

公众号-程序员灿灿 141

动态时间规整(Dynamic Time Warping,DTW):让时间序列分析不再枯燥和代码全分析

动态时间规整(DTW)是一种用于比较时间序列相似性的算法,特别适用于处理长度不同或时间轴不对齐的序列。本文介绍了DTW的核心概念,包括其通过非线性对齐解决时间扭曲问题的能力,以及在语音识别、金融分析等领域的应用。通过Python代码示例,演示了如何计算两个模拟时间序列的DTW距离,并可视化最优对齐路径。结果显示,DTW能够有效捕捉序列间的相似模式,即使它们在时间轴上存在偏移或伸缩。该算法通过最小化累积距离来评估相似性,得分越低表明序列间相似度越高。

此星光明博客 162

【算法】用两个栈实现队列,斐波那契数列题目变种

栈和队列问题 栈的特点是后进先出,队列的特点是先进先出。通常栈是不考虑排序的数据结构,而队列可能存在排序问题。 面试题9:用两个栈实现队列 在一个自定义的队列类中维护了两个STL栈,实现在队列尾部插入结点和在队列头部删除结点的两个方法。 在插入时都push到一个栈A里,在删除时如果栈B里有就从栈B里pop一个,否则把栈A的全倒进去,再从栈B里pop一个。 #include&amp;amp;amp;amp;lt;...

大桔骑士的学习笔记 860

基于FPGA的64点fft变换verilog开发

这精度的损失在10bits看来对最后的误差的影响是存在是不可忽略的。此后,在这思想基础上又开发了高基和分裂基等快速算法,随着数字技术的高速发展,1976年出现建立在数论和多项式理论基础上的维诺格勒傅里叶变换算法(WFTA)和素因子傅里叶变换算法。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。

FPGA/MATLAB学习教程/源码/项目合作开发 1977

基于YOLOv5/v8/v10的答题卡填涂识别与评分系统(附数据集+UI界面+完整代码)

在教育信息化的大背景下,传统的手工阅卷方式正在被智能化技术所取代。答题卡识别作为标准化考试的核心环节,其准确率和效率至关重要。本文将详细介绍如何利用YOLO系列目标检测算法(YOLOv5、YOLOv8、YOLOv10)构建一个答题卡填涂识别与评分系统。文章从数据集的制作与标注开始,逐步深入到模型的训练、评估与对比,最后基于PyQt5设计了一个用户友好的桌面端UI界面,实现了从图像输入到得分输出的全流程自动化。

YOLO 635

2.继承Queue接口的类

LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。 Queue<String> queue = new LinkedList<String>(); 一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。 这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。 poll,remove 区别...

qq_14823031的博客 742

手把手带你完成基于UNet的医学图像分割系统设计与实现,UNet网络架构讲解,UNet复现,使用vibe coding工具,开发一个完整系统,包含完整源码

哈喽,大家好,这里是落花不写码,本次教程讲一下 U-Net 分割篇,U-Net 它是一篇 2015 年发表的论文,那为什么到现在还需要讲呢?因为后续讲到 GAN、扩散模型时候是离不开 U-Net 架构的,所以今天先带大家使用 U-Net 模型完成一些图像分割。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 870

恶补基础知识:Java 栈与队列详解

小菜鸡必看的恶补基础知识

南国以南i的博客 939

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

用两个栈实现队列,java代码实现

1 队列的功能介绍 队列的功能就是FIFO(先进先出)原则。不管是队列还是栈,他们的功能都是存储数据,底层实现可以数组也可以是链表,但是他们各自有他们的特点。既然队列也是存储数据的一种数据结构,那么他就有增删改查等功能。队列的添加元素是在队尾添加,删除元素是在队头删除。 下面介绍一下队列的增删改查操作: push(int x):在队列尾部添加一个元素 pop():删除队列头部第一个元素 empt...

麦田里的守望者 3005

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java笔记14——栈和队列

学习栈的原理及基本实现 学习队列的原理及基本实现 熟练使用 java 中的栈和队列

m0_61608447的博客 270

算法基础(四):栈和队列

队列:先入先出单端队列:左边进右边出双端队列:左边进右边出或者右边进左边出(不常用)访问Access:O(N)搜索Search:O(N)插入Insert:O(1) 只能在末尾插入删除Remove:O(1) 只能在头部删除栈:先进后出应用:浏览器的后对功能访问Access:O(1) 只能访问栈顶搜索Search:O(N)插入Insert:O(1) 只能在末尾插入删除Remove:O(1) 只能删除栈顶。

niexinyu0026的博客 723

java队列和栈 共同_java 栈和队列的模拟--java

栈的定义:栈是一种特殊的表这种表只在表头进行插入和删除操作。因此,表头对于栈来说具有特殊的意义,称为栈顶。相应地,表尾称为栈底。不含任何元素的栈称为空栈。栈的逻辑结构:假设一个栈S中的元素为an,an-1,..,a1,则称a1为栈底元素,an为栈顶元 素。栈中的元素按a1 ,a2,..,an-1,an的次序进栈。在任何时候,出栈的元素都是栈顶元素。换句话说,栈的修改是按后进先出的原则进行的.因此,...

weixin_35627928的博客 105

Java之美[从菜鸟到高手演变]之数据结构基础、线性表、栈和队列、数组和字符串

用我的理解,数据结构包含数据和结构,通俗一点就是将数据按照一定的结构组合起来,不同的组合方式会有不同的效率,使用不同的场景,如此而已。比如我们最常用的数组,就是一种数据结构,有独特的承载数据的方式,按顺序排列,其特点就是你可以根据下标快速查找元素,但是因为在数组中插入和删除元素会有其它元素较大幅度的便宜,所以会带来较多的消耗,所以因为这种特点,使得数组适合:查询比较频繁,增、删比较少的情况,这就是数据结构的概念。数组实现的线下表可以参考ArrayList,在JDK中附有源码,感兴趣的同学可以读读。

智慧演绎,无处不在 4万+

java中队列链表栈的作用,Java 用链表实现栈和队列

栈是一种基于后进先出(LIFO)策略的集合类型。当邮件在桌上放成一叠时,使用的就是栈。新邮件会放在最上面,当你要看邮件时,会一封一封从上到下阅读。栈的顶部称为栈顶,所有操作都在栈顶完成。前面提到的新邮件,就是在栈顶入栈(push),阅读的时候从栈顶取出一封就是出栈(pop)。就像下面这个图一样,你不能从最下面直接拿一封信出来。1 package ABAB;23 /**4 * 链表实现栈5 * ...

weixin_36071392的博客 219

Java线程:堵塞队列与堵塞栈

一、堵塞队列   Java定义了堵塞队列的接口java.util.concurrent.BlockingQueue,堵塞队列是一个指定长度的队列,当试图向队列中添加元素而队列已满,或者是想从队列移出元素而队列为空的时候,堵塞队列导致线程堵塞。   在协调多个线程之间的合作时,堵塞队列是一个有用的工具。   堵塞队列的方法分为三类,取决于当队列满或空时它们的相应方式。     1、如果将队列

arredando的博客 508

用栈来表示队列,用队列来表示栈

这个问题总的栈和队列,没有自己手写,自己手写太浪费了,于是就用的java中的集合框架list下面的LinkedList 其实LinkedList既可以当做栈用,也可以当做队列来使用. 作为栈的时候,LinkedList<T> stack = newLinkedList<T>().入栈stack.push(e),出栈stack.pop() 作为队列时,Lin...

apple3515的博客 252

用栈实现队列;用队列实现栈;

1 package my_basic; 2 3 import java.util.LinkedList; 4 import java.util.Queue; 5 import java.util.Stack; 6 7 public class StackAndQueueConvert { 8 9 /*利用栈...

dezhewei9015的博客 152

Java实现栈和队列

栈:LIFO(后进先出) 队列:FIFO(先进先出) 栈的顺序存储结构实现: * top:栈顶指针,初始化top=-1 * 入栈:data[++top]=e * 出栈:(E)data[top--] * 得到栈顶元素:(E)data[top] * 空:top=-1 1 package com.myutil.stack; 2 3 /** ...

aie92502的博客 132

剑指Offer005之两个栈实现一个队列(相关话题:栈,队列)

题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 解题思路: push时先检查A中是否有数据有的话循环执行B.push(A.pop),把A中的数据取光,再把数据push到A。最后循环执行A.push(B.pop)把B中的数据放回A pop时直接从A中pop 入栈: 出栈: 2、队列的特点 队列的特点是先进先出,出入元素是在不同的两端(队头和队尾)。 入队: 出队: 3、两个栈实现队列 我们拥有两个栈,可以让其中一个栈作为队列的入口,负责插入新元素;

数据与算法架构提升之路专栏 505

基础数据结构之栈和队列

前言 我们生活中会遇见很多的看起来很棘手的问题,比如一堆尚未处理的邮件,正要去电影院排队购买一张电影票(两张也可以,你值得拥有...),这些我们用自己熟悉的方式来处理他们,而我们自己熟悉的这些方式,很可能就和栈和队列有关.今天,我们就来谈谈栈和队列. 栈的定义 栈是限定仅在表尾进行插入和删除操作的线性表,也称为LIFO(后入先出)结构. 我们把允许插入和删除的地方称之为栈顶,另一端称之为栈

星宇宙的专栏 410
上一篇: java基础:14.3 线性表的手动实现
下一篇: java基础:14.5 散列 -- HashMap的手动实现
桃子味的梨
博客等级 码龄12年 129粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值