热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java——数组栈ArrayStack

栈的应用:undo操作-编辑器系统调用栈-操作系统括号匹配-编译器 以下是动态数组实现的数组栈:定义动态数组:packageDate_pacage;publicclas

栈的应用:

  undo操作-编辑器

  系统调用栈-操作系统

  括号匹配-编译器

 

以下是动态数组实现的数组栈:

定义动态数组:

package Date_pacage;
public class Array {
//叫它静态数组
//private int[] data;
private E[] data;
private int size;
//构造函数
public Array(int capacity) {
data
= (E[])new Object[capacity];
size
= 0;
}
//无参数的构造函数,默认数组的容量为10
public Array() {
this(10);
}
public int getSize() {
return size;
}
public boolean isEmpty() {
return size == 0;
}
public int getCapacity() {
return data.length;
}
// O(1)
public void addLast(E e) {
add(size, e);
}
// O(n)
public void addFirst(E e) {
add(
0, e);
}
// O(n/2) = O(n)
public void add(int index, E e) {
if(size>=data.length)
resize(
2 *data.length);
if(index<0 || index>size)
throw new IllegalArgumentException("Add failed.index is error.");
for(int i=size-1;i>=index;i--) {
data[i
+1] = data[i];
}
data[index]
= e;
size
++;
}
@Override
public String toString() {
StringBuilder res
= new StringBuilder();
res.append(String.format(
"Array: size = %d, capacity = %d\n", size, data.length));
res.append(
"[");
for(int i = 0 ; i) {
res.append(data[i]);
if(i != size - 1)
res.append(
", ");
}
res.append(
"]");
return res.toString();
}
public E get(int index) {
if(index <0 || index >= size)
throw new IllegalArgumentException("Get failed. Index is illegal");
return data[index];
}
public E getFirst() {
return get(size - 1);
}
public E getLast() {
return get(0);
}
void set(int index, E e) {
if(index <0 || index >= size)
throw new IllegalArgumentException("Get failed. Index is illegal");
data[index]
= e;
}
public boolean contains(E e) {
for(int i = 0; i ) {
if(data[i].equals(e))
return true;
}
return false;
}
public int find(E e) {
for(int i = 0; i ) {
if(data[i].equals(e))
return i;
}
return -1;
}
public E remove(int index) {
if(index <0 || index >= size)
throw new IllegalArgumentException("Get failed. Index is illegal");
E res
= data[index];
for(int i = index; i) {
data[i] = data[i+1];
}
size
--;
//释放空间,也可以不写
//loitering objects != memory leak
data[size] = null;
if(size == data.length / 4 && data.length / 2 != 0)
resize(data.length
/ 2);
return res;
}
public E removeFirst() {
return remove(0);
}
public E removeLast() {
return remove(size-1);
}
//只删除了一个e,并不能保证删除了全部e
public void removeElement(E e) {
int index = find(e);
if(index != -1)
remove(index);
}
private void resize(int newCapacity) {
E[] newData
= (E[]) new Object[newCapacity];
for(int i=0; i ) {
newData[i] = data[i];
}
data
= newData;
}
}

定义Stack接口:

package Date_pacage;
public interface Stack {
int getSize();
boolean isEmpty();
void push(E e);
E pop();
E peek();
}

定义ArrayStack:

package Date_pacage;
public class ArrayStack implements Stack {
Array
array;
public ArrayStack(int capacity) {
array
= new Array<>(capacity);
}
public ArrayStack() {
array
= new Array<>();
}
@Override
public int getSize() {
return array.getSize();
}
@Override
public boolean isEmpty() {
return array.isEmpty();
}
public int getCapacity() {
return array.getCapacity();
}
@Override
public void push(E e) {
array.addLast(e);
}
@Override
public E pop() {
return array.removeLast();
}
@Override
public E peek() {
return array.getLast();
}
@Override
public String toString() {
StringBuilder res
= new StringBuilder();
res.append(
"STACK:");
res.append(
"[");
for(int i = 0 ; i ) {
res.append(array.get(i));
if(i != array.getSize()-1)
res.append(
", ");
}
res.append(
"] top");
return res.toString();
}
}

 



推荐阅读
author-avatar
shiorinrin_933_893
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有