数据结构之——栈

栈是一种只能从表的一端存取数据且遵循 "先进后出" 原则的线性存储结构。

栈的开口端被称为栈顶;封口端被称为栈底。

顺序表设定两个变量:1、栈顶指针top  2、栈底指针base(不动)

顺序表中设定一个实时指向栈顶元素的变量(一般命名为 top),top 初始值为 -1,表示栈中没有存储任何数据元素,及栈是"空栈"。一旦有数据元素进栈,则 top 就做 +1 操作;反之,如果数据元素出栈,top 就做 -1 操作。

数组实现

package TestZhan;

public class ZhanArray {
	
	private int[] array;
	private int base;	//
	private int top;	//栈顶指针
	private int Size;	//栈的容量
	
	
	//初始化栈
	public ZhanArray(int Size){
		this.Size = Size;
		array = new int[Size];			//分配栈的大小
		this.top = -1;					//指向栈顶元素的上一个位置
	}
	
	//栈是否为空
	public boolean isEmpty() {			//看top指针是否为-1
		return (top == -1) ? true:false;
	}
	//栈是否满了
	public boolean isFull() {
		return (top == (this.Size - 1)) ? true:false;
	}
	
	//出栈
	public int pop() {
		int temp;
		
		if(isEmpty()) {
			return 0;
		}
		temp = array[top];		//栈顶变量赋值给临时变量Temp
		array[top] = 0;			//置空栈顶的位置
		top--;					//栈顶指针下移	
		return 1;
	}
	//压栈
	public int push(int elem) {
		if(isFull()) {
			return 0;
		}
		top++;					//栈顶指针上移一位
		array[top] = elem;		//元素赋值给栈顶指针指向的位置
		return 0;
	}
	public void showData() {
		for(int temp:array) {
			System.out.println(temp);
		}
	}
	public static void main(String[] args) {
		ZhanArray zhan = new ZhanArray(10);
		zhan.push(10);
		zhan.push(20);
		zhan.push(30);
		zhan.push(40);
		int k = zhan.push(50);	
		zhan.showData();
		zhan.pop();
		zhan.showData();
		
		
	}

}

链表实现:

链栈实际上就是一个只能采用头插法插入或删除数据的链表

package TestZhan;

class Node<T>{        //链表的节点
	private T elem;
	private Node<T> next;
	
	public Node() {
		this.elem = null;
		this.next = null;
	}
	
	public Node(T data) {
		super();
		this.elem = data;
		this.next = null;
	}

	public T getElem() {
		return elem;
	}

	public void setElem(T elem) {
		this.elem = elem;
	}

	public Node<T> getNext() {
		return next;
	}

	public void setNext(Node<T> next) {
		this.next = next;
	}
	
	
}




public class ZhanLink<T>{
	private Node<T> top;		//栈顶节点

	//初始化
	public ZhanLink() {
		this.top = new Node<T>();
	}
	//初始化栈
	public void initStack() {
		this.top.setElem(null);
		this.top.setNext(null);
	}
	//是否为空栈
	public boolean isEmpty() {
		return (top.getNext() == null) ? true:false;
	}
	//栈是否满
//	
//	public boolean isFull() {
//		return (top.getElem() == null) ? true:false;
//	}
	//出栈
	public Node<T> pop(){
		if(isEmpty())
			return null;
		Node<T> temp = top.getNext();				//取出当前要删除的栈顶节点
		top.setNext(top.getNext().getNext());		//删除节点
		return temp;
	}
		
	//入栈
	public void push(Node<T> node){
		if(isEmpty()) {
			top.setNext(node);
			node.setNext(null);
		}
		node.setNext(top.getNext());
		top.setNext(node);
	}
	public static void main(String[] args) {
		
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值