`

数据结构之栈与队列

阅读更多
一。栈
1。概念:栈(stack)是一种线性数据结构,只能访问它的一端来存储或者读取数据。栈是一种后进先出的结构(LIFO)
2。栈的主要操作:
.clear()——清栈
.isEmpty()——检查栈是否为空
.push(e)——压栈
.pop()——出栈
.topEl()——返回栈顶元素

3。栈的java实现:使用数组链表实现

/** *//**
 * 
 
*/

package com.sohu.blog.denns_zane.stackqueue;

/** *//**
 * 
@author dennis
 * 
 
*/

public abstract class AbstractStack {
    
public abstract Object pop();

    
public abstract void push(Object obj);

    
public abstract Object topEl();

    
public abstract boolean isEmpty();

    
public abstract void clear();
}



/** *//**
 * 
 
*/

package com.sohu.blog.denns_zane.stackqueue;

/** *//**
 * 
@author dennis
 * 
 
*/

public class Stack extends AbstractStack {
    
private java.util.ArrayList pool = new java.util.ArrayList();

    
public Stack() {
    }


    
public Stack(int n) {
        pool.ensureCapacity(n);
    }


    
public void clear() {
        pool.clear();
    }


    
public boolean isEmpty() {
        
return pool.isEmpty();
    }


    
public Object topEl() {
        
if (isEmpty())
            
throw new java.util.EmptyStackException();
        
return pool.get(pool.size() - 1);
    }


    
public Object pop() {
        
if (isEmpty())
            
throw new java.util.EmptyStackException();
        
return pool.remove(pool.size() - 1);
    }


    
public void push(Object el) {
        pool.add(el);
    }


    
public String toString() {
        
return pool.toString();
    }

}


4。栈的应用:
1)程序中的匹配分割符,如(,[,{等符号
2)大数的运算,比如大数相加,转化为字符串,利用栈处理
3)回文字,例子:
/** *//**
 * 
 
*/

package com.sohu.blog.denns_zane.stackqueue;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/** *//**
 * 
@author dennis
 * 
 
*/

public class HuiWen {

    
/** *//**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        BufferedReader buffer 
= new BufferedReader(new InputStreamReader(
                System.in));
        
try {
            String str 
= buffer.readLine();
            
if (str != null)
                isHuiWen(str);

        }
 catch (IOException e) {
            e.printStackTrace();
        }

        
// TODO Auto-generated method stub

    }


    
public static void isHuiWen(String str) {
        
int length = str.length();
        
char[] ch = str.toCharArray();
        Stack stack 
= new Stack();
        
if (length % 2 == 0{
            
for (int i = 0; i < length / 2; i++{
                stack.push(ch[i]);
            }

            
for (int i = length / 2; i < length - 1; i++{
                
if (ch[i] != ((Character) stack.pop()).charValue()) {
                    System.out.println(
"不是回文字!!");
                    
return;
                }


            }


            System.out.println(str 
+ "是回文字!!");
        }
 else {
            
for (int i = 0; i < length / 2; i++{
                stack.push(ch[i]);
            }

            
for (int i = (length / 2 + 1); i < length - 1; i++{
                
if (ch[i] != ((Character) stack.pop()).charValue()) {
                    System.out.println(
"不是回文字!!");
                    
return;
                }

            }

            System.out.println(str 
+ "是回文字!!");
        }


    }


}


4)java虚拟机中的本地方法栈


二。队列(queue)
1。概念:队列也是线性结构,从尾部添加元素,从头部删除元素。与栈相反,队列是先入先出结构(FIFO)
2。队列主要操作:
.clear() ——清空队列
.isEmpty()——判断队列是否为空
.enqueue(el)——从尾部插入元素el
.dequeue()——从队列中起出第一个元素,并删除
.firstEl()——返回队列第一个元素,不删除。

3。队列的实现:
1)环形数组:需要考虑队列已满的两种情况,1,第一个元素在最后一个元素之后;2,第一个元素在第一单元,最后一个元素在最后单元。给出一个java实现:
/** *//**
 * 
 
*/

package com.sohu.blog.denns_zane.stackqueue;

/** *//**
 * 
@author dennis
 * 
 
*/

// queue implemented as an array
public class ArrayQueue {
    
private int first, last, size;

    
private Object[] storage;

    
public ArrayQueue() {
        
this(100);
    }


    
public ArrayQueue(int n) {
        size 
= n;
        storage 
= new Object[size];
        first 
= last = -1
分享到:
评论

相关推荐

    数据结构中的栈和队列

    PPT内容是数据结构中有关栈和队列的知识,非常适合正在学习数据结构基础的同学

    数据结构栈和队列试题及答案

    ### 数据结构之栈和队列知识点详解 #### 一、选择题知识点解析 1. **栈的操作原则** 栈是一种特殊的线性表,它只允许在一端进行插入和删除操作,这一端称为栈顶(top)。另一端称为栈底(bottom),不允许在其上进行...

    数据结构栈和队列(参考代码)

    ### 数据结构栈和队列知识点解析 #### 一、栈的基本概念与操作 **栈**是一种特殊的线性表,只允许在一端进行插入和删除操作,这一端被称为栈顶,另一端被称为栈底。栈遵循先进后出(First In Last Out, FILO)的...

    数据结构中栈和队列思想的停车场管理系统

    基于c语言数据结构中栈和队列思想的简单停车场管理系统,以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车...

    数据结构 栈和队列PPT

    栈和队列是两种基础且重要的数据结构,广泛应用于各种算法和程序设计中。本课件及课堂笔记将深入探讨这两种数据结构的概念、特性以及它们在实际问题中的应用。 栈(Stack)是一种后进先出(LIFO,Last In First Out...

    数据结构之栈和队列基本操作及实践

    在实际编程中,我们经常会遇到需要利用栈和队列解决问题的情况,因此掌握这些基本数据结构及其应用是每个程序员的基础技能之一。 在提供的压缩包文件“栈和队列”中,可能包含了关于这两种数据结构的实例代码、练习...

    数据结构(栈和队列)

    这是数据结构的栈和队列一章的课件。栈和队列在数据结构中很重要

    数据结构实验报告《二、栈和队列的运用》

    其中,栈(Stack)和队列(Queue)是最基本的数据结构之一,分别基于“后进先出”(LIFO, Last In, First Out)和“先进先出”(FIFO, First In, First Out)的原则工作。 **栈**是一种线性数据结构,只允许在一端...

    数据结构栈和队列解决迷宫问题

    数据结构栈和队列解决迷宫问题 本文档详细介绍了利用栈和队列解决迷宫问题的步骤,对于初学者学习数据结构能很好的进行辅导。本文档主要涉及到数据结构的两个重要概念:栈和队列,并介绍了如何使用这两个数据结构来...

    数据结构实验栈和队列详细实验报告

    【栈和队列的基本概念】 栈是一种特殊的线性表,具有“后进先出”(LIFO,Last In First Out)...通过这个实验,学生不仅能深入理解栈和队列的数据结构,还能锻炼编程和问题解决能力,为后续的算法学习打下坚实基础。

    C++实战篇(数据结构):栈、队列

    C++实战篇(数据结构):栈、队列 C++实战篇(数据结构):栈、队列 C++实战篇(数据结构):栈、队列 C++实战篇(数据结构):栈、队列 C++实战篇(数据结构):栈、队列 C++实战篇(数据结构):栈、队列 C++实战篇(数据结构)...

    Python常见数据结构之栈与队列用法示例

    本文实例讲述了Python常见数据结构之栈与队列用法。分享给大家供大家参考,具体如下: Python常见数据结构之-栈 首先,栈是一种数据结构。具有后进先出特性。 #栈的实现 class Stack(): def __init__(self,size): ...

    《数据结构》栈和队列答案

    ### 数据结构之栈和队列知识点详解 #### 一、基础知识概述 **栈(Stack)** 和 **队列(Queue)** 都是线性数据结构的重要组成部分,它们在算法设计和计算机科学中有广泛的应用。 1. **栈**:栈是一种只允许在一端...

    数据结构试验2-栈和队列实验报告含源码

    在这个"数据结构试验2-栈和队列实验报告含源码"中,我们将深入探讨两个基本且至关重要的数据结构——栈和队列。 栈(Stack)是一种后进先出(LIFO,Last In First Out)的数据结构。想象一个堆叠的盘子,最后一个放...

    数据结构之栈、队列全部代码

    在这个"数据结构之栈、队列全部代码"的压缩包中,我们将会深入探讨两种基本且重要的线性数据结构——栈和队列,以及它们在编程中的实际应用。 首先,栈(Stack)是一种后进先出(LIFO,Last In First Out)的数据...

    java 数据结构之栈与队列

    Java 数据结构之栈与队列 Java 数据结构之栈与队列是计算机科学中的一种基本数据结构,它们都是用于存储和处理数据的集合。栈和队列都是线性数据结构,但是它们的实现方式和使用场景不同。 一、栈(Stack) 栈是...

    数据结构实验 栈和队列 回文判断

    本次实验的主题是“数据结构实验”,重点关注栈和队列这两种基本数据结构,并利用它们来实现一个回文判断的功能。回文是一种特殊的字符串,其正读和反读是一样的,比如“上海自来水来自海上”。 首先,我们来看栈...

    C++数据结构实验二:栈与队列的应用

    3.掌握栈和队列的逻辑结构特点、顺序存储结构、链式存储结构、顺序栈和链栈的结构体类型定义、循环队列和链队列的结构体类型定义、栈和队列在两种存储结构上的各种基本操作的实现算法。 4.将任意十进制数转换为三种...

    数据结构——栈和队列经典测试题

    数据结构——栈和队列经典测试题 一、栈和队列的概念和特点 栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶,不允许插入和删除运算的一端称为栈底。栈的特点是后进先出(Last In First Out,LIFO),即...

Global site tag (gtag.js) - Google Analytics