1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
| 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(); }
}
|