栈的数组实现
2016-01-07 15:36
267 查看
今天复习下栈,自己写一遍:
1.栈是限制插入和删除只能在同一个位置上进行的表,该位置是表的末端叫做栈顶。栈有时也叫后进先出(LIFO)表,基本操作有pop(删除)和push(插入)。
2.栈的数组实现:
1.栈是限制插入和删除只能在同一个位置上进行的表,该位置是表的末端叫做栈顶。栈有时也叫后进先出(LIFO)表,基本操作有pop(删除)和push(插入)。
2.栈的数组实现:
package com.algith; public class MyStack<T> { private int size; private T[] elements = null; private static final int DEFAULT_SIZE = 10; public MyStack(){ clear(); } public int size(){ return size; } @SuppressWarnings("unchecked") public void clear(){ size = 0; elements = (T[]) new Object[DEFAULT_SIZE]; } public void push(T t){ if(size==elements.length){ ensureCapacity(size*2+1); } elements[size++] = t; } public T pop(){ if(size<1) return null; int topIndex = size - 1; T t = elements[topIndex]; remove(topIndex); return t; } @SuppressWarnings("unchecked") public void ensureCapacity(int capacity){ if(capacity<size)return; T[] oldElements = elements; elements = (T[]) new Object[capacity]; for(int i=0;i<size;i++){ elements[i] = oldElements[i]; } } public T remove(int index){ if(index<0||index>size) throw new ArrayIndexOutOfBoundsException(); T removeValue = elements[index]; for(int i=index;i<size-1;i++){ elements[i] = elements[i+1]; } size--; return removeValue; } public T get(int index){ if(index<0||index>size) throw new ArrayIndexOutOfBoundsException(); return elements[index]; } public T set(int index,T newValue){ if(index<0||index>size) throw new ArrayIndexOutOfBoundsException(); T oldValue = elements[index]; elements[index] = newValue; return oldValue; } public void print(){ for(int u=0;u<size;u++){ System.out.println(elements[u]+",index"+u); } } public static void main(String[] args) { MyStack<Integer> stack = new MyStack<Integer>(); for(int i=0;i<10;i++){ stack.push(i+12); } System.out.println(stack.size()); System.out.println(stack.remove(1)); System.out.println(stack.size()); System.out.println(stack.pop()); System.out.println(stack.size()); stack.print(); }
相关文章推荐
- SSH框架整合开发详解(个人笔记)
- iOS 陀螺仪 加速计
- 密码加密
- 数据挖掘与机器学习关系与区别
- New Year and Days
- 缩略图、水印、验证码
- 前端移动端页面开发
- 代理、nsnotification和kvo的区别和用法
- js密码强度检测
- 转载 注解@PostConstruct与@PreDestroy讲解及实例 - 云淡风轻、仅此一抹 - 博客频道 - CSDN.NET http://blog.csdn.net/yaerfeng/art
- 跟我一起写 Makefile(十二)
- java Enumeration用法
- iOS第一个简单APP
- UILabel使用不同的大小和字体、颜色
- jQuery版本冲突问题解决与分析
- MyBatis增删改查总结
- spring security+extjs session超时解决方案 博客分类: 软件架构
- IO库 8.4
- 前端自动化学习笔记(一)——Yeoman,bower,Grunt的安装
- 诡异的精度diff追查