1 #include<stdio.h>
2 #include<stdlib.h>
3
4 typedef int DataType;
5 struct Node {
6 DataType data;
7 struct Node* next;
8 };
9 typedef struct Node *PNode;
10 typedef struct Node *LinkStack;
11
12 // 定义一个栈
13 LinkStack SetNullStack_Link()
14 {
15 LinkStack top = (LinkStack)malloc(sizeof(struct Node));
16 if (top != NULL) top->next = NULL;
17 else printf("Alloc failure");
18 return top;
19 }
20
21 //判断是否为空栈
22 int IsNullStack_link(LinkStack top)
23 {
24 if (top->next == NULL)
25 return 1;
26 else
27 return 0;
28 }
29
30 //入栈
31 void Push_link(LinkStack top, DataType x)
32 {
33 PNode p;
34 p = (PNode)malloc(sizeof(struct Node));
35 if (p == NULL)
36 printf("Alloc failure");
37 else
38 {
39 p->data = x;
40 p->next = top->next;
41 top->next = p;
42 }
43 }
44
45 //出栈
46 void Pop_link(LinkStack top)
47 {
48 PNode p;
49 if (top->next == NULL)
50 printf("it is empty stack!");
51 else
52 {
53 p = top->next;
54 top->next = p->next;
55 free(p);
56 }
57 }
58
59 //输出栈里面对应的数据
60 DataType Top_link(LinkStack top)
61 {
62 if (top->next == NULL)
63 {
64 printf("It is empty stack!");
65 return 0;
66 }
67 else
68 return top->next->data;
69 }
70 int main()
71 {
72 LinkStack stackA = SetNullStack_Link();
73 DataType data;
74 scanf("%d,", &data);
75 while (data != -1)
76 {
77
78 Push_link(stackA,data);
79 scanf("%d,", &data);
80 }
81 while (!IsNullStack_link(stackA))
82 {
83
84 printf("%d",Top_link(stackA));
85 Pop_link(stackA);
86 }
87 return 0;
88 }