栈
定义:
插入和删除都发生在同一端的有序列表,操作这端称为栈顶,先插入的元素会被最后移除,栈的特点是先进后出
栈操作:
push()向栈中推入元素
pop()从栈中移除元素
下溢:从空栈中弹出元素;
上溢:向满栈中推入元素;
栈的运用:
1.符号或标签匹配问题
2.中缀表示法转换为后缀表示法
3.求后缀表达式的值,
4.函数调用
5.浏览器的回退机制
6.树的遍历充当辅助数据结构
实现:
⑴数组
package com.dong.stack;
/**
 * 栈实现
 * 
 * @author liuD
 */
public class ArticleResource {
//使用简单的数组实现。
	static class ArrayStack{
		int top;
		int capacity;
		int array[];
	}
	public ArrayStack createStack() {
		ArrayStack stack = new ArrayStack();
		if(stack == null) return null;
		stack.capacity = 1;
		stack.top = -1;
		stack.array = new int [stack.capacity];
		if(stack.array == null)
			return null;
		return stack;
	}
	public boolean isEmptyStack(ArrayStack stack) {
		return (stack.top == -1);
	}
	public boolean isFullStack(ArrayStack stack) {
		return (stack.top == stack.capacity - 1);
	}
	public void push(ArrayStack stack,int value) {
		if(isFullStack(stack))
			System.out.println("Stack overflow");
		stack.array[stack.top+1]  = value;
	}
	public int pop(ArrayStack stack) {
		if(isEmptyStack(stack)) {
			System.out.println("Stack overflow");
			return 0;
		}
		else
			return (stack.array[stack.top]);
	}
	public void delete(ArrayStack stack) {
		if(stack != null) {
			if(stack.array != null)
				stack.array = null;
			stack = null;
		}
	}
}
  ⑵链表
package com.dong.stack;
/**
 * 栈实现
 * 
 * @author liuD
 */
public class ArticleResource {
//使用链表实现
	static class LinkStack {
		int data;
		LinkStack next;
	}
	
	LinkStack createLinkStack() {
		return null;
	}
	//注意这里的插入是从前端插入,最先插入的元素在链表的后面。
	public void LinkPush(int data,LinkStack top) {
		LinkStack temp = new LinkStack();
		if(temp != null)
			return ;
		temp.data = data;
		temp.next = top;
		top = temp;
	}
	public boolean IsEmptyLinkStack(LinkStack top) {
		return  (top==null);
	}
	public int POPLinkStack(LinkStack top) {
		int data;
		LinkStack temp;
		if(IsEmptyLinkStack(top))
			return Integer.MIN_VALUE;
		temp = top;
		top = top.next;
		data = temp.data;
		return data;
	}
	
}
  


