顺序栈(数组实现)

上面代码实现了Stack的 isEmpty(),isFull(),clear(),push(),pop(),peek()方法。顺序栈,必须要同时检查下溢出(underflow)和上溢出(overflow)。

public class Stack {
    private int[] stack;
    private static final int defaultSize = 100;
    private int size;
    private int topIndex;
    public Stack() {
        setUp(defaultSize);
    }
    public Stack(int sz) {
        setUp(sz);
    }
    public void setUp(int sz) {
        size = sz; topIndex = 0; stack = new int[size];
    }
    public boolean isEmpty() {
        return topIndex == 0;
    }
    public boolean isFull() {
        return topIndex == size;
    }
    public void clear() {
        topIndex = 0;
    }
    public void push(int x) throws Exception {
        if(isFull()) throw new Exception("overflow");
        else stack[topIndex++] = x;
    }
    public int pop() throws Exception {
        if(isEmpty()) throw new Exception("underflow");
        else return stack[--topIndex];
    }
    public int peek() throws Exception {
        if(isEmpty()) throw new Exception("underflow");
        else return stack[topIndex-1];
    }
}
时间: 2024-10-25 06:04:16

顺序栈(数组实现)的相关文章

使用JAVA数组实现顺序栈

1,首先总结一下线性表(分为顺序表和链接表,[即顺序存储结构和链式存储结构的区别])和栈(顺序栈和链接栈)还有队列(顺序队列和链接队列)的JAVA类库中的实现: java.util.ArrayList 实现了顺序表,java.util.LinkedList 实现了链接表的功能. java.util.ArrayDeque实现了顺序栈和顺序队列(该类中即定义了与栈操作有关的方法,也定义了与队列操作有关的方法).java.util.LinkedList实现了链接栈和链接队列. 2,定义了一个Stack

数据结构Java实现05----栈:顺序栈和链式堆栈

数据结构Java实现05----栈:顺序栈和链式堆栈 一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作. 先进后出:堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底.堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈. 备注:栈本身就是一个线性表,所以我们之前讨论过线性表的顺序存储和链式存储,对于栈来说,同样适

(001)顺序栈的C++实现

(001)顺序栈的C++实现 2014/12/4     jxlijunhao 这里通过C++模板类来实现一个顺序栈: 1)初始化 2)入栈 3)出栈 4)取栈顶元素 在顺序栈中(一个数组中),操作的总是发生在数组的末尾 定义一个头文件 #ifndef SQ_STACK_H #define SQ_STACK_H #include<iostream> using namespace std; template<class T> class sq_stack { private: in

浅谈数据结构之顺序栈(三)

栈:是限定仅在表尾进行插入与删除操作的线性表.我们把允许插入与删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的称为空栈.栈的插入操作,叫作进栈,也叫压栈.入栈,类似于子弹入弹夹:栈的删除操作,叫作出栈,也叫弹栈,如同弹夹中的子弹出夹.注意:栈的定义中的"表尾"指的是"栈顶",而不是"栈底". 首先,栈是一个线性表,也就是说:栈具有线性结构,即前驱后继关系:只不过它是一个特殊的线性表而已,它的特殊之处在于限制了这个线性表的插入与删除位置,它始

数据结构之栈(1)——顺序栈

栈作为一种特殊的线性表,在计算机中有顺序储存结构和链式存储结构两种存储结构,根据这个我们把栈分为顺序栈和链栈 顺序栈 栈顶:用top来动态地表示栈顶元素在顺序栈中的位置,当top=-1时表示栈为空 这个是栈这个数据类型的定义 typedef char ElemTypeStack; typedef struct{ ElemTypeStack elem[MAXSIZE]; int top; }FirStack; 用一个数组来存储数据,对应的下标表示他在栈中的位置,top表示栈顶元素对应的下标,若栈为

数据结构(C实现)------- 顺序栈

栈是限定仅在表的一端进行插入或删除的纯属表,通常称允许插入,删除的一端为栈顶(Top),相应在的,则称另一端为栈底(Bottom).不含元素的栈则称为空栈. 所设栈S={a1,a2,a3,...,an},则称a1为栈底元素,an为栈顶元素.根据栈的定义可知,栈顶元素总是最后入栈并且最先出栈的:栈底元素总是最先入栈并且最后出栈的.即栈是按后进先出的原则进行的.因此,栈又称为后进先出(LIFO)的线性表. 而顺序栈,即栈的顺序存储结构.它是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同

PHP实现简单顺序栈

栈与数组:php数组也有压入压出的方法array_push 和array_shift.是不是数组就是栈数据结构?或者明明数组就可完成,为何还要栈 解答:去全国各地都可以用双腿走到,为何选择火车飞机?数组就是腿,栈就是火车飞机.首先不相等,其次栈可以让我们集中精力去解决更加核心的业务需求. 简单顺序栈实现 class Data{    private $data;     public function __construct($data){         $this->data=$data; 

顺序栈与链表栈的实现

栈是一种常见的数据结构,它虽然有栈顶和栈底之分,但它只能从一端操作(插入或删除),从而是一种"先进后出"的操作模式.向栈内进数据称为压栈(Push),从栈里取出数据叫出栈(POp).例如压栈顺序为1.2.3.4.5,着出栈的顺序为5.4.3.2.1(只考虑一次性出栈的情况). 栈按照存储的方式,又分为顺序栈和链表栈.顺序栈基于数组实现,所以顺序栈存储数据的内存是连续的,在创建栈时规定好栈的大小,这样对内存的使用效率并不高.而链式栈则是采用了链表来实现,其元素的存储地址是不连续的,而且是

D_S 顺序栈的基本操作

//  main.cpp #include <iostream> using namespace std; #include "Status.h" typedef int SElemType; #include "SqStack.h" int main() { SqStack S; SElemType e; InitStack(S); Push(S,2); Push(S,4); Push(S,6); Push(S,8); cout<<&quo