用数组和链表实现栈结构
2016-08-08 00:00
253 查看
摘要: 数组实现栈结构
栈是一种 “后进先出”的线性结构:
用数组实现一个简单的栈结构
测试:
结果:
5
EEE
4
DDD
false
-------------------------------------------------我是一条华丽的分界线------------------------------------------------------
用链表实现一个简单的栈结构:
节点的定义:
测试:
结果:
4
3
false
栈是一种 “后进先出”的线性结构:
用数组实现一个简单的栈结构
public class Stack<E> { //使用数组来实现栈结构: private Object[] stack;//存放元素 private int size;//栈的大小,即数组中元素的个数 public Stack(){ stack = new Object[10]; } //判断数组是否满了,若满了,则扩容 private void ensureCapacity(int size){ int len = stack.length; if (size > len) {//数组以满 stack = Arrays.copyOf(stack, 10);//每次扩容10 } } public boolean isEmpty(){ return size == 0; } //入栈 public E push(E item){ ensureCapacity(size+1); stack[size++] = item; return item; } //peep()返回栈顶元素 public E peep(){ if (this.isEmpty()) { return null; } return (E) stack[size-1]; } //pop() 移除栈顶元素 public E pop(){ E e = peep(); stack[size-1] = null; size--; return e; } }
测试:
public static void main(String[] args) { Stack stack = new Stack(); stack.push("AAA"); stack.push("BBB"); stack.push("CCC"); stack.push("DDD"); stack.push("EEE"); System.out.println(stack.size); System.out.println(stack.pop());//返回并移除栈顶元素 System.out.println(stack.size); System.out.println(stack.peep());//返回栈顶元素 System.out.println(stack.isEmpty()); }
结果:
5
EEE
4
DDD
false
-------------------------------------------------我是一条华丽的分界线------------------------------------------------------
用链表实现一个简单的栈结构:
节点的定义:
class Node<E>{ Node<E> next = null; E data; public Node(E date) { this.data = date; } public Node() { } }
public class Stack<E> { Node<E> top = null; public boolean isEmpty(){ return top == null; } public void push(E date){ Node<E> newNode = new Node<E>(date); newNode.next = top; top = newNode; } public E pop(){ if (this.isEmpty()) { return null; } E data = top.data; top = top.next; return data; } public E peep(){ if (this.isEmpty()) { return null; } return top.data; } }
测试:
public static void main(String[] args) { Stack stack = new Stack(); stack.push(1); stack.push(2); stack.push(3); stack.push(4); System.out.println(stack.pop()); System.out.println(stack.peep()); System.out.println(stack.isEmpty()); }
结果:
4
3
false
相关文章推荐
- 数据结构与实现——数组、矩阵、链表、队列、栈、对象、二叉树和红黑树
- 学会一种数据结构二:队列的数组实现和链表实现
- 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现
- 自行实现Map底层结构(数组+链表) --Java版
- 数据结构之用数组和链表实现栈
- 数据结构与算法学习笔记——链表部分实现(数组形式)
- 数据结构之顺序表(数组实现与链表实现)
- C++学习总结——顺序存储,链式存储,索引存储,哈希存储的优缺点,以及vector数组,list链表,十字链表,索引结构,hash表的实现
- 数据结构之用数组和链表实现队列
- 数据结构再学习--数组实现链表
- C 数据结构使用数组和链表实现栈
- 数据结构之stack,queue的数组与链表实现
- HashMap数组结构与链表结构的实现例子
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 排序算法集:冒泡、插入、希尔、快速(数组实现、链表实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 怎样编写一个程序,把一个有序整数数组放到二叉树中? 编写实现链表排序的一种算法。说明为什么你会选择用这样的方法?