Java用链表实现栈和队列

1、用链表实现栈

package stack;
/**
 * 
 * @author denghb
 *
 */
class Link {
	public long dData;
	public Link next;
	public Link(long dd) {
		dData = dd;
	}
	public void displayLink() {
		System.out.print(dData + " ");
	}
}

class LinkList {
	private Link first;
    public LinkList() {
    	first = null;
    }
    public boolean isEmpty() {
    	return (first == null);
    }
    public void insertFirst(long dd) {
    	Link newLink = new Link(dd);
    	newLink.next = first;
    	first = newLink;
    }
    public long deleteFirst() {
    	//如果这是一个非空链表
    	Link temp = first;
    	first = first.next;
    	return temp.dData;
    }
    public void displayList() {
    	Link current = first;
    	while(current != null) {
    		current.displayLink();
    		current = current.next;
    	}
    	System.out.println("");
    }
}

class LinkStack {
	private LinkList theList;
	public LinkStack() {
		theList = new LinkList();
	}
	public void push(long j) {
		theList.insertFirst(j);
	}
	public long pop() {
		return theList.deleteFirst();
	}
	public boolean isEmpty() {
		return (theList.isEmpty());
	}
	public void displayStack() {
		System.out.print("Stack (top-->bottom): ");
		theList.displayList();
	}
}
public class LinkStackApp {
	public static void main(String[] args) {
		LinkStack theStack = new LinkStack();
		theStack.push(20);
		theStack.push(40);
		
		theStack.displayStack();
		
		theStack.push(60);
		theStack.push(80);
		
		theStack.displayStack();
		
		theStack.pop();
		theStack.pop();
		
		theStack.displayStack();
	}
}

2、用链表实现队列

package queue;
/**
 * 
 * @author denghb
 *
 */
class Link {
	public long dData;
	public Link next;
	public Link(long dd) {
		dData = dd;
	}
	public void displayLink() {
		System.out.print(dData + " ");
	}
}

class FirstLastList {
	private Link first;
	private Link last;
	
    public FirstLastList() {
    	first = null;
    	last = null;
    }
    public boolean isEmpty() {
    	return (first == null);
    }
    public void insertLast(long dd) {
    	Link newLink = new Link(dd);
    	if(isEmpty()) {
    		first = newLink;
    	} else {
    		last.next = newLink;
    	}
    	last = newLink;
    }
    public long deleteFirst() {
    	//如果这是一个非空链表
    	long temp = first.dData;
    	if(first.next == null) {  //如果仅仅有一个链接点
    		last = null;
    	}
    	first = first.next;
    	return temp;
    }
    public void displayList() {
    	Link current = first;
    	while(current != null) {
    		current.displayLink();
    		current = current.next;
    	}
    	System.out.println("");
    }
}

class LinkQueue {
	private FirstLastList theList;
	public LinkQueue() {
		theList = new FirstLastList();
	}
	public void insert(long j) {
		theList.insertLast(j);
	}
	public long remove() {
		return theList.deleteFirst();
	}
	public boolean isEmpty() {
		return (theList.isEmpty());
	}
	public void displayStack() {
		System.out.print("Stack (top-->bottom): ");
		theList.displayList();
	}
}

public class LinkQueueApp {
	public static void main(String[] args) {
		LinkQueue theQueue = new LinkQueue();
		theQueue.insert(20);
		theQueue.insert(40);
		
		theQueue.displayStack();
		
		theQueue.insert(60);
		theQueue.insert(80);
		
		theQueue.displayStack();
		
		theQueue.remove();
		theQueue.remove();
		theQueue.displayStack();
	}
}

第一个源程序的输出结果:

Stack (top-->bottom): 40 20 
Stack (top-->bottom): 80 60 40 20 
Stack (top-->bottom): 40 20 

第二个源程序的输出结果:

Stack (top-->bottom): 20 40 
Stack (top-->bottom): 20 40 60 80 
Stack (top-->bottom): 60 80 

posted @ 2016-03-24 08:50  zfyouxi  阅读(627)  评论(0编辑  收藏  举报