栈的数组实现

1.首先定义了栈需要实现的接口

public interface Mystack<T> {

    boolean isempty();

   void clear();

   int length();
   //入栈
   boolean push(T data);
   //出栈
   T pop();
}

2.栈的数组实现

package suanfa;

public class MyArrayStack<T> implements Mystack<T> {

    private Object [] obs=new Object[16];
    private int size=0;

    @Override
    public boolean isempty() {
        // TODO Auto-generated method stub
        return size==0;
    }

    @Override
    public void clear() {
        // TODO Auto-generated method stub
        for (int i=0;i<obs.length;i++){

            obs[i]=null;
        }

        size=0;
    }

    @Override
    public int length() {
        // TODO Auto-generated method stub
        return size;
    }

    @Override
    public boolean push(T data) {
        // TODO Auto-generated method stub
    //    return false;

        if(size>=obs.length){
            resize();

        }
        obs[size++]=data;

        return true;

    }

    @Override
    public T pop() {
        // TODO Auto-generated method stub

if(size==0){
       return null;
       }
     return (T) obs[--size];

    }

    private void resize(){

        Object [] tmp=new Object[obs.length*3/2+1];

        for(int i=0;i<obs.length;i++){
            tmp[i]=obs[i];
            obs[i]=null;

        }

        obs=tmp;

    }

}
时间: 2024-10-12 11:52:22

栈的数组实现的相关文章

栈上数组,做了什么事?

考虑 char tmp[7] = "abcd";  做了什么事? 1.按道理,堆栈指针需要在栈顶挪出7个字节,但是为了字节对齐,栈顶指针会挪出8个字节,最高地址的一个字节不使用,是cc,注意:栈的使用,地址是减小的. 2.tmp就是栈顶指针的别名,是个常量,不能修改指向. 3.从栈顶向高地址拷贝a,b,c,d,\0, 5个字节,\0是"abcd"结尾隐含的字节,数组申请了7个字节,剩余的两个字节补充为\0, 第8个字节为cc,没有初始化. 4.数组可以不定义长度,这

包含MIN函数的栈+一个数组实现两个堆栈+两个数组实现MIN栈

1.题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 思路:利用一个辅助栈来存放最小值 栈  3,4,2,5,1 辅助栈 3,2,1 每入栈一次,就与辅助栈顶比较大小,如果小就入栈,如果大就不入栈当前的辅助栈:当出栈时,辅助栈元素相等时也要出栈. class Solution { public: stack<int> mystack1;//辅助栈 stack<int> minstack;//最小栈 void push(int value) { if(

hdu1224 dp(dp + 栈/父亲数组记录路径)

题意:给定 n 个城市的有趣度,并给出可以从那些城市飞到那些城市.其中第一个城市即起始城市同样也作为终点城市,有趣度为 0,旅行途中只允许按有趣度从低到高旅行,问旅行的有趣度最大是多少,并输出旅行路径. 我一开始读题的时候各种深井冰理解错想复杂,导致我一开始甚至认为第一个有趣度 0 代表的是第二个城市,因为第一个城市一定是 0 不需要给出,加上没看到题意里的第一个城市也是第 n + 1 个城市,觉得给出的能旅行的城市里出现了 n + 1 是应该的.还有关于城市联通,我以为给出的联通关系不一定就是

线性表之栈的数组实现

#include<stdio.h> #include<malloc.h> typedef struct node { int *pBase; int len;//数组最大容纳长度 int top;//数组有效长度 }stack,*Stack; void initStack(Stack,int); void push(Stack,int); void pop(Stack,int *); bool stackEmpty(Stack); bool stackFull(Stack); vo

HDU 1062.Text Reverse【栈或数组或字符串流】【字符处理】【8月30】

Text Reverse Problem Description Ignatius likes to write words in reverse way. Given a single line of text which is written by Ignatius, you should reverse all the words and then output them. Input The input contains several test cases. The first lin

左神算法第八节课:介绍递归和动态规划(汉诺塔问题;打印字符串的全部子序列含空;打印字符串的全排列,无重复排列;母牛数量;递归栈;数组的最小路径和;数组累加和问题,一定条件下最大值问题(01背包))

暴力递归: 1,把问题转化为规模缩小了的同类问题的子问题 2,有明确的不需要继续进行递归的条件(base case) 3,有当得到了子问题的结果之后的决策过程 4,不记录每一个子问题的解 动态规划 1,从暴力递归中来 2,将每一个子问题的解记录下来,避免重复计算 3,把暴力递归的过程,抽象成了状态表达 4,并且存在化简状态表达,使其更加简洁的可能 一:递归 1. 汉诺塔问题 汉诺塔问题(不能大压小,只能小压大),打印n层汉诺塔从最左边移动到最右边的全部过程. 左中右另称为 from.to.hel

[数据结构与算法] : 栈的数组实现

头文件 1 typedef int ElementType; 2 3 #ifndef _STACK_AR_ 4 #define _STACK_AR_ 5 6 struct StackRecord; 7 typedef struct StackRecord *Stack; 8 9 int IsEmpty(Stack S); 10 int IsFull(Stack S); 11 Stack CreateStack(int MaxElements); 12 void DisposeStack(Stac

分别用数组和链表实现栈和队列

2015.2.8星期二,晴天 栈的数组操作: 栈的特点:先进后出,后进先出. 用数组的方式实现:首先需要创建一个结构体,在结构体里面包括数据指针.指向栈顶的”指针“和标记栈的大小的一个变量.数据指针是指向一定大小的数组的首地址.结构体和这个数组够成一个完整的栈. 1.在创建栈的操作中,主要就是创建这个结构体和这个数组,并对其进行一定的初始化,这个操作和链表的创建比较类似,初始化的语句:stack->max_depth = max_depth; //说明栈的大小stack->pop = -1;

栈ADT的数组实现

/* 栈的数组实现声明 */ struct StackRecord; typedef struct StackRecord *Stack; #define MinSstackSize 5 #define EmptyTOS -1 struct StackRecord { int Capacity; int TopOfStack; ElementType *Array; }; /* 栈的创建-数组实现 */ Stack CreateStack( int MaxElements ) { Stack S