链式栈——Java实现

原创 2018年04月17日 21:28:30
package struct;

//接口
interface ILinkStack{
	//栈中元素个数(栈大小)
	int size();
	//取栈顶元素
	Object top();
	//判断栈是否为空
	boolean isEmpty();
	//入栈
	Object pop();
	//出栈
	Object push(Object value);
	//清空栈
	void clear();
}

//工厂类
class Factory2{
	private Factory2(){}
	public static ILinkStack getILinkStackInstance(){
		return new LinkStackImpl();
	}
}

class LinkStackImpl implements ILinkStack {
	//栈顶元素
	Node top;
	//链表长度记录入栈元素
	private int count;
	class Node{
		Node prev;
		Node next;
		Object data;
		public Node(Object data) {
			this.data = data;
		}
	}
	
	public int size() {
		return count;
	}

	public Object top() {
		return top.data;
	}
	//判栈空
	public boolean isEmpty() {
		return (size()==0);
	}
	//入栈
	public Object push(Object value) {
		Node node = new Node(value);
		if(top == null){
			top = node;
		}else{
			top.next = node;
			node.prev = top;
			top = top.next;
		}
		count++;
		return top;
	}
	public void print(){
		System.out.println("从栈顶到栈底打印栈中元素:");
		myPrint(top);
		return;
	}
	//栈顶->栈底打印链表
	private void myPrint(Node top){
		for(Node node = top;node!=null;node=node.prev){
			System.out.print(node.data+" ");
		}
	}
	//出栈
	public Object pop() {
		Node node = top;
		if(top == null){
			System.out.println("空栈无要出栈元素");
			return -1;
		}else{
			top = top.prev;
			node.prev = null;
			node.data = null;
		}
		count--;
		return top();
	}
	//清空栈
	public void clear(){
		Node node1 = top;
		for(Node node = top;node!=null;){
			node = node.prev;
			node1.data = null;
			node1.prev = null;
			count--;
		} 
	}
}
public class LinkStack {
	public static void main(String[] args) {
		ILinkStack linkStack = Factory2.getILinkStackInstance();
		//向下转型
		LinkStackImpl linkStack1 = (LinkStackImpl)linkStack;
		System.out.println("============测试isEmpty函数(空栈)=================");
		System.out.println(linkStack.isEmpty());
		System.out.println("============测试push和print函数=================");
		linkStack.push(5);
		linkStack.push(9);
		linkStack.push(10);
		linkStack.push(1);
		linkStack.push(8);
		linkStack.push(12);
		linkStack.push(6);
		linkStack.push(3);
		linkStack1.print();
		System.out.println();
		System.out.println("============入栈后测试top函数=================");
		System.out.println(linkStack.top());
		System.out.println("============入栈后测试size函数=================");
		System.out.println(linkStack.size());
		System.out.println("============测试pop和print函数=================");
		linkStack.pop();
		linkStack.pop();
		linkStack.pop();
		linkStack1.print();
		System.out.println();
		System.out.println("============出站后测试top函数=================");
		System.out.println(linkStack.top());
		System.out.println("============出栈后测试size函数=================");
		System.out.println(linkStack.size());
		System.out.println("============测试clear后size函数=================");
		linkStack.clear();
		System.out.println(linkStack.size());
	}
}

Java栈(链式实现)

/** * 链式栈的实现 * 相当于只能在头部插入和删除的单链表 */ public class LinkedStack { private static final Str...
  • IMBA123456789
  • IMBA123456789
  • 2016-09-09 21:59:10
  • 513

【数据结构】之链栈的java实现

前言 最近参加一些校招,博主被问了很多数据结构的问题,其中很多问题面试官需要的答案不仅仅是需要你了解这些概念,而是需要你通过某种语言(C、C++、Java)把这种结构实现,同时还能根据公司的具体需求进...
  • wuwenxiang91322
  • wuwenxiang91322
  • 2013-09-28 18:19:43
  • 5705

c++顺序栈和链式栈的实现

基本定义: 栈(Stack)是n个元素a1,a2,…an,组成的有限序列,记作S =(a1,a2,…,an),并且只能在一端插入和删除元素,n=0时称为空栈。 栈的特征: 由于栈只能...
  • longjingwen12345
  • longjingwen12345
  • 2016-11-24 19:36:46
  • 281

栈的实现:链式栈

栈的链式存储,即链式栈。它相比于顺序栈, 优点: 插入、删除灵活 (不必移动节点,只要改变节点中的指针指向即可)。 逻辑上相邻的节点物理上不必相邻。 缺点: 比顺序存储结构的存储密度小 (每...
  • zhangxiangDavaid
  • zhangxiangDavaid
  • 2014-06-05 21:22:15
  • 2190

数据结构Java实现05----栈:顺序栈和链式堆栈

本文转载至:http://www.cnblogs.com/smyhvae/p/4789699.html 一、堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的...
  • zhouzhiwengang
  • zhouzhiwengang
  • 2017-04-22 05:28:42
  • 865

用c语言实现的链式栈

栈栈的链式存储结构 源代码下载网址http://lijingronghcit.download.csdn.net/ 栈的链式存储结构与线性表的链式存储结构相同,是通过由结点构成的单链表实现的。为操作方...
  • lijingronghcit
  • lijingronghcit
  • 2009-03-13 21:03:00
  • 9277

链式堆栈_C语言实现

链式栈具有存储灵活,没存利用率高的特点,今天采用c语言实现链式堆栈。栈的主体采用单链表的方式实现,链表不带头结点。为了方便知道栈的栈底和栈顶,需要定义两个分别指向链表的头和尾的指针top,base。链...
  • shuoyueqishilove
  • shuoyueqishilove
  • 2017-01-18 18:54:37
  • 934

链式栈实现进制转换

2016年7月25日11:03:37 利用链表模拟栈,将十进制转换成对应的八进制,二进制,八进制#include #include #include typedef int DataType ...
  • ArithmeticException
  • ArithmeticException
  • 2016-11-19 12:27:45
  • 991

链式栈(c++实现)

栈的特点是后进先出。
  • adminabcd
  • adminabcd
  • 2015-06-30 21:41:04
  • 1431

链式栈实现

  • 2015年05月27日 15:35
  • 2KB
  • 下载
收藏助手
不良信息举报
您举报文章:链式栈——Java实现
举报原因:
原因补充:

(最多只允许输入30个字)