Java栈的实现
来源:互联网 发布:云计算需要学什么课程 编辑:程序博客网 时间:2024/06/05 11:26
栈定义
栈(stack)是限定仅在表尾进行插入或删除操作的线性表。
对栈来说,表尾端有其特殊含义,称为栈顶(top),相应地表头端称为栈底(bottom)。不含元素的空表称为空栈。
栈的修改是按后进先出的原则进行的,因此,栈又称为后进先出(Last in first out)的线性表(简称LIFO结构)。
栈的属性与方法
Java程序代码实现
public interface IMyStack<T> { /* * 入栈 */ boolean push(T data); /* * 出栈 */ T pop(); /* * 栈的长度 */ int length(); /* * 栈是否为空 */ boolean isEmpty(); /* * 清空栈 */ void clear();}
栈的顺序表示
定义:
顺序栈:即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针(top)指示栈顶元素在顺序栈中的位置。
代码:
java程序代码实现
public class MyArrayStack<T> implements IMyStack<T> { private Object[] objs = new Object[16]; private int size; @Override public boolean push(T data) { if(size >= objs.length){ addLength(); } objs[size++]=data; return true; } @SuppressWarnings("unchecked") @Override public T pop() { if(size==0){ return null; } return (T) objs[--size]; } @Override public int length() { return size; } @Override public boolean isEmpty() { return size==0; } @Override public void clear() { for (int i = 0; i < size; i++) { objs[i] = null; } size = 0; } @Override public String toString(){ StringBuffer sb = new StringBuffer(); sb.append("MyArrayStack:["); for (int i = 0; i < size; i++) { sb.append(objs[i]); if(i != size-1){ sb.append(","); } } sb.append("]"); return sb.toString(); } /* * 扩容数组 */ private void addLength() { Object[] temp = new Object[size*3/2+1]; for(int i=0; i<size; i++){ temp[i] = objs[i]; objs[i] = null; } objs = temp; }}
栈的链式表示
定义:
链栈用链表作为存储结构,栈初始化时仅需给栈顶指针分配内存空间,而后每当有数据入栈时再为该数据分配空间,这样实现了内存空间的动态分配。
代码:
java程序代码实现
public class MyLinkedStack<T> implements IMyStack<T> { /* * 栈顶指针 */ private Node<T> top; /* * 栈的大小 */ private int size; public MyLinkedStack() { this.top = null; this.size = 0; } @Override public boolean push(T data) { Node<T> node = new Node<T>(data); node.next = top; // 修改栈顶指针 top = node; size++; return true; } @Override public T pop() { if(top == null){ return null; } Node<T> node = top; // 修改栈顶指针 top=node.next; size--; return node.data; } @Override public int length() { return size; } @Override public boolean isEmpty() { return size==0; } @Override public void clear() { top = null; size = 0; }}
栈定义
栈(stack)是限定仅在表尾进行插入或删除操作的线性表。
对栈来说,表尾端有其特殊含义,称为栈顶(top),相应地表头端称为栈底(bottom)。不含元素的空表称为空栈。
栈的修改是按后进先出的原则进行的,因此,栈又称为后进先出(Last in first out)的线性表(简称LIFO结构)。
栈的属性与方法
Java程序代码实现
public interface IMyStack<T> { /* * 入栈 */ boolean push(T data); /* * 出栈 */ T pop(); /* * 栈的长度 */ int length(); /* * 栈是否为空 */ boolean isEmpty(); /* * 清空栈 */ void clear();}
栈的顺序表示
定义:
顺序栈:即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针(top)指示栈顶元素在顺序栈中的位置。
代码:
java程序代码实现
public class MyArrayStack<T> implements IMyStack<T> { private Object[] objs = new Object[16]; private int size; @Override public boolean push(T data) { if(size >= objs.length){ addLength(); } objs[size++]=data; return true; } @SuppressWarnings("unchecked") @Override public T pop() { if(size==0){ return null; } return (T) objs[--size]; } @Override public int length() { return size; } @Override public boolean isEmpty() { return size==0; } @Override public void clear() { for (int i = 0; i < size; i++) { objs[i] = null; } size = 0; } @Override public String toString(){ StringBuffer sb = new StringBuffer(); sb.append("MyArrayStack:["); for (int i = 0; i < size; i++) { sb.append(objs[i]); if(i != size-1){ sb.append(","); } } sb.append("]"); return sb.toString(); } /* * 扩容数组 */ private void addLength() { Object[] temp = new Object[size*3/2+1]; for(int i=0; i<size; i++){ temp[i] = objs[i]; objs[i] = null; } objs = temp; }}
栈的链式表示
定义:
链栈用链表作为存储结构,栈初始化时仅需给栈顶指针分配内存空间,而后每当有数据入栈时再为该数据分配空间,这样实现了内存空间的动态分配。
代码:
java程序代码实现
public class MyLinkedStack<T> implements IMyStack<T> { /* * 栈顶指针 */ private Node<T> top; /* * 栈的大小 */ private int size; public MyLinkedStack() { this.top = null; this.size = 0; } @Override public boolean push(T data) { Node<T> node = new Node<T>(data); node.next = top; // 修改栈顶指针 top = node; size++; return true; } @Override public T pop() { if(top == null){ return null; } Node<T> node = top; // 修改栈顶指针 top=node.next; size--; return node.data; } @Override public int length() { return size; } @Override public boolean isEmpty() { return size==0; } @Override public void clear() { top = null; size = 0; }}
0 0
- 栈的实现(JAVA)
- 栈的实现-----java
- 【java】栈的实现
- 栈的java实现
- 栈的Java实现
- 栈的实现-java
- 栈 的java实现
- Java栈的实现
- java栈的实现
- 栈的实现java
- Java 栈的实现
- Java 栈的实现
- java栈的实现
- 栈的java实现
- java 栈的实现
- java栈的实现
- java栈的实现
- Java栈的实现
- 【div_css_table】Div与table的区…
- 【css】【手机web app开发】…
- 【css spirte】合并拼图成一…
- 【win】【iis】MIME配置,让你的网…
- 【windows 2003】【iis 6.0】安全…
- Java栈的实现
- 【dedecms】织梦cms基础安全配置,…
- 【dedecms】【织梦cms】列表读取标…
- mysql 连接测试
- 【git】【开源中国】【coding.net…
- 【git】【开源中国】【coding.net…
- OTG(usb2.0)强制Host调试全记录
- 【git】【开源中国】【coding.net…
- 【html5-css3游戏开发】js框架选择