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