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

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);
	}
	
}

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;
	}
}

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();
	}
	
}

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();
	}

}

 

posted @ 2016-03-30 21:12  tonglin0325  阅读(978)  评论(0编辑  收藏  举报