1 //用链表实现堆栈
2 /**
3 * 节点类
4 */
5 class LinkS {
6 private long data;
7 public LinkS next;
8
9 public LinkS(long d) {
10 this.data = d;
11 }
12
13 public String toString() {
14 return String.valueOf(data);
15 }
16 }
17
18 /**
19 * 链表类
20 */
21 class LinkSList {
22 private LinkS first;
23
24 public LinkSList() {
25 first = null;
26 }
27
28 public void insertFirst(LinkS node) {
29 node.next = first;
30 first = node;
31 }
32
33 public LinkS deleteFirst() {
34 LinkS temp = first;
35 first = first.next;
36 return temp;
37 }
38
39 public boolean isEmpty() {
40 return first == null;
41 }
42
43 public String toString() {
44 if (isEmpty())
45 return "[]";
46 StringBuilder sb = new StringBuilder();
47 sb.append("[");
48 LinkS curr = first;
49 while (curr != null) {
50 sb.append(curr.toString()).append(",");
51 curr = curr.next;
52 }
53 sb.deleteCharAt(sb.length() - 1);
54 sb.append("]");
55 return sb.toString();
56 }
57 }
58
59 /**
60 * 栈
61 */
62 class LinkStack {
63 private LinkSList linkList;
64
65 public LinkStack() {
66 this.linkList = new LinkSList();
67 }
68
69 public void push(LinkS l) {
70 this.linkList.insertFirst(l);
71 }
72
73 public LinkS pop() {
74 return this.linkList.deleteFirst();
75 }
76
77 public boolean isEmpty() {
78 return this.linkList.isEmpty();
79 }
80
81 public String toString() {
82 return this.linkList.toString();
83 }
84
85 public void display() {
86 System.out.println(toString());
87 }
88 }
89
90 public class LinkStackDemo {
91 public static void main(String[] args) {
92 LinkStack stack = new LinkStack();
93 for (int i = 0; i < 5; i++) {
94 LinkS l = new LinkS(i);
95 stack.push(l);
96 stack.display();
97 }
98 while (!stack.isEmpty()) {
99 System.out.print("pop出" + stack.pop());
100 System.out.print("现在栈为:");
101 stack.display();
102 }
103 }
104 }