Java数据结构——用链表实现栈

Posted tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java数据结构——用链表实现栈相关的知识,希望对你有一定的参考价值。

技术分享

技术分享

//=================================================
// File Name       :	LinkStack_demo
//------------------------------------------------------------------------------
// Author          :	Common

//类名:Link_long
//属性:
//方法:
class Link_long{			//链节点类
	public long dData;
	public Link_long next;				//链表中下一个节点的引用
	
	public Link_long(long dData) {
		super();
		this.dData = dData;
	}
	
	public void displayLink(){			//显示当前节点的值
		System.out.println("dData"+dData);
	}
	
}

//类名:LinkList_long
//属性:
//方法:
class LinkList_long{
	private Link_long first;			//只需要第一个节点,从第一个节点出发即可定位所有节点

	public LinkList_long() {			//构造函数
		this.first = null;
	}
	
	public boolean isEmpty(){
		return (first == null);
	}
	
	public void insertFirst(long dd){		//插入元素是从链表的头开始插入
		Link_long newLink = new Link_long(dd);
		newLink.next = first;
		first = newLink;
	}
	
	public long deleteFirst(){				//删除temp.dData
		Link_long temp = first;					//暂存first
		first = first.next;								//把next设为first
		return temp.dData;						//返回原来的first
	}
	
	public void displayList(){
		System.out.println("List(first-->last):");
		Link_long current = first;			//用于不断改变位置实现遍历
		while(current != null){
			current.displayLink();
			current = current.next;
		}
	}
	
	public Link_long find(int key){					//查找指定的关键字
		Link_long current = first;
		while(current.dData != key){
			if(current.next == null)
				return null;
			else
				current = current.next;
		}
		return current;
	}
	
	public Link_long delete(int key){			//如果current的值匹配,则删除
		Link_long current = first;				
		Link_long previous = first;
		//没有匹配到值
		while(current.dData != key){
			if(current.next == null)
				return null;
			else{							//pre和cur向后移动
				previous = current;
				current = current.next;
			}
		}
		//匹配到值
		if(current == first)		//只有一个first,并匹配,则把first设成first.next
			first = first.next;
		else								//current的值匹配,则删除,并把cur的next赋给pre的next
			previous.next = current.next;
		return current;
	}
}

//类名:LinkList_long
//属性:
//方法:
class LinkStack{	//用链表实现栈,链表从First开始插入,新的元素将变成First,先删除后来元素
	
	private LinkList_long theList;

	public LinkStack() {		//构造函数
		theList = new LinkList_long();
	}
	
	public void push(long j){		//入栈,即在链表的First插入元素
		theList.insertFirst(j);
	}
	
	public long pop(){					//出栈,即删除链表的First元素
		return theList.deleteFirst();
	}
	
	public boolean isEmpty(){	//判断栈是否为空,即判断链表是否为空
		return (theList.isEmpty());
	}
	
	public void displayStack(){
		System.out.println("Stack(top-->bottom):");
		theList.displayList();
	}
	
}


//主类
//Function        : 	LinkStack_demo
public class LinkStack_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		LinkStack theStack = new LinkStack();
		theStack.push(10);
		theStack.push(20);
		theStack.push(30);
		theStack.displayStack();
		
		theStack.pop();
		theStack.pop();
		theStack.displayStack();
	}

}

 

以上是关于Java数据结构——用链表实现栈的主要内容,如果未能解决你的问题,请参考以下文章

栈(存储结构链表)--Java实现

用链表实现栈demo

java 用栈实现((a+b)+c)计算

《Java数据结构与算法》笔记-CH5-链表-4用链表实现堆栈

数据结构与算法--必知必会

N日一篇——Java实现栈