zoukankan      html  css  js  c++  java
  • 我的算法日志:数据结构之栈

    • 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶(top),相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈(push),它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈(push),它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

    java代码实现:

     1 package com.guohao.arithmetics;
     2 
     3 import java.lang.reflect.Array;
     4 
     5 /**
     6  * 栈
     7  */
     8 public class Stack<T> {
     9     private T[] data;  //储存栈内元素的数组
    10     private int capacity;  //栈的容量(栈内元素数量的最大值)
    11     private int size;  //栈的大小(栈内现有元素的数量)
    12     private int top;  //栈顶标志器
    13 
    14     public Stack(Class<T> type, int capacity){
    15         //为了保证类型安全,Java中不允许直接用泛型声明数组,如:"dataArray = new T[capacity]"是错误的!
    16         data = (T[])Array.newInstance(type, capacity);
    17         this.capacity = capacity;
    18         size = 0;
    19         top = -1;
    20     }
    21 
    22     /**
    23      * 入栈
    24      * @param element
    25      * @return
    26      */
    27     public boolean push(T element){
    28         if(isFull()){
    29             return false;
    30         }
    31 
    32         data[++top] = element;
    33         size++;
    34         return true;
    35     }
    36 
    37     /**
    38      * 出栈
    39      * @return
    40      */
    41     public T pop(){
    42         if(isEmpty()){
    43             return null;
    44         }
    45 
    46         size--;
    47         return data[top--];
    48     }
    49 
    50     /**
    51      * 判断是否栈满
    52      * @return
    53      */
    54     public boolean isFull(){
    55         return capacity==size;
    56     }
    57 
    58     /**
    59      * 判断是否栈空
    60      * @return
    61      */
    62     public boolean isEmpty(){
    63         return size==0;
    64     }
    65 
    66     //getter & setter
    67     public T[] getData() {
    68         return data;
    69     }
    70 
    71     public void setData(T[] data) {
    72         this.data = data;
    73     }
    74 
    75     public int getCapacity() {
    76         return capacity;
    77     }
    78 
    79     public void setCapacity(int capacity) {
    80         this.capacity = capacity;
    81     }
    82 
    83     public int getSize() {
    84         return size;
    85     }
    86 
    87     public void setSize(int size) {
    88         this.size = size;
    89     }
    90 
    91     public int getTop() {
    92         return top;
    93     }
    94 
    95     public void setTop(int top) {
    96         this.top = top;
    97     }
    98 }
  • 相关阅读:
    node cluster(集群) 模块可以创建共享服务器端口的子进程
    通过 Channel Messaging API的「MessageChannel」,实现iframe与主页面的双通讯
    5.nginx的keepalive和pipe
    4.nginx的server_name正则匹配
    3.nginx的特殊server_name及匹配
    2.nginx的server_name匹配顺序
    1.初识nginx
    flutter pub.get 没有反应
    linux cp拷贝文件时,不确认强制覆盖
    Cocos学习笔记
  • 原文地址:https://www.cnblogs.com/Seraph1999/p/12791213.html
Copyright © 2011-2022 走看看