1 /*
2 2012年11月23日9:10:12
3 链栈的基本操作
4 InitStack 初始化链栈
5 */
6
7
8 #include<stdio.h>
9 #include<stdlib.h>
10
11
12
13 //////////定义结构体//////////////////
14 typedef struct Node
15 {
16 struct Node *pNext;
17 int data;
18 }NODE,*PNODE;
19
20 typedef struct Stack
21 {
22 PNODE pTop;
23 int count;
24 }LinkStack,*PLinkStack;
25
26
27
28 ////////////函数声明//////////////////////
29 void InitStack(PLinkStack);
30 void Push(int val,PLinkStack pS);
31 void Traverse(PLinkStack pS);
32 void Pop(PLinkStack pS);
33
34
35 /////////////主函数///////////////////
36 int main(void)
37 {
38 LinkStack S;
39 InitStack(&S);
40 Push(3,&S);
41 Push(2,&S);
42 Push(4,&S);
43 Push(5,&S);
44 Traverse(&S);
45 Pop(&S);
46 Traverse(&S);
47 return 0;
48 }
49
50
51
52 ///////////初始化链栈//////////////////
53 void InitStack(PLinkStack pS)
54 {
55
56 pS->pTop = (PNODE)malloc(sizeof(NODE));
57 if(NULL == pS->pTop)
58 {
59 printf("分配内存失败\n");
60 exit(-1);
61 }
62 else
63 {
64 pS->pTop->pNext = NULL;
65 pS->count = 0;
66 }
67 }
68
69
70
71 ////////////入栈///////////////
72 void Push(int val,PLinkStack pS)
73 {
74 PNODE pNew;
75 pNew = (PNODE)malloc(sizeof(NODE));
76 if(NULL == pNew)
77 {
78 printf("分配内存失败\n");
79 exit(-1);
80 }
81 else
82 {
83 pNew->data= val;
84 pNew->pNext = pS->pTop;
85 pS->pTop = pNew;
86 pS->count++;
87 }
88 }
89
90
91 ///////////遍历输出////////////////
92 void Traverse(PLinkStack pS)
93 {
94 PNODE pTemp = pS->pTop;
95 if(NULL == pTemp->pNext)
96 {
97 printf("空栈!\n");
98 }
99 else
100 {
101 while(NULL!=pTemp->pNext)
102 {
103 printf("%d\n",pTemp->data);
104 pTemp = pTemp->pNext;
105 }
106 }
107 return;
108 }
109
110
111 ////////////出栈////////////////////
112 void Pop(PLinkStack pS)
113 {
114 PNODE pTemp = pS->pTop;
115 if(NULL == pTemp->pNext)
116 {
117 printf("空栈!\n");
118 }
119 else
120 {
121 printf("出栈元素为%d\n",pTemp->data);
122 pS->pTop = pS->pTop->pNext;
123 free(pTemp);
124 pS->count--;
125
126 }
127
128
129 }