数据结构堆栈

 1 /* Stack.h */
 2 #ifndef _Stack_H
 3 #define _Stack_H
 4 
 5 struct NodeStack;
 6 typedef struct NodeStack *PtrToNode;
 7 typedef PtrToNode Stack;
 8 typedef char ElementType;
 9 
10 int StackIsEmpty(Stack S);
11 Stack CreateStack(void);
12 void DisposeStack(Stack S);
13 void MakeEmpty(Stack S);
14 void Push(ElementType X, Stack S);
15 ElementType Top(Stack S);
16 void Pop(Stack S);
17 
18 // Stack implementation is a linked list with a header
19 struct NodeStack
20 {
21     ElementType Element;
22     PtrToNode Next;
23 };
24 
25 #endif
 1 /* Stack.cpp */
 2 #include "Stack.h"
 3 #include <stdlib.h>
 4 #include <stdio.h>
 5 
 6 int StackIsEmpty(Stack S)
 7 {
 8     return S->Next == NULL;
 9 }
10 
11 // 创建一个空栈, 只需创建一个头结点
12 Stack CreateStack(void)
13 {
14     Stack S;
15 
16     S = (struct NodeStack*)malloc(sizeof(struct NodeStack));
17     if(S == NULL)
18         printf("Fatal Error: Out of space!!");
19     S->Next = NULL;
20     MakeEmpty(S);
21     return S;
22 }
23 // 清空栈
24 void MakeEmpty(Stack S)
25 {
26     if(S == NULL)
27         printf("Must use CreateStack first");
28     else
29         while(!StackIsEmpty(S))
30             Pop(S);
31 }
32 
33 // Push 操作, 在链表的前端插入
34 void Push(ElementType X, Stack S)
35 {
36     PtrToNode TmpCell;
37 
38     TmpCell = (struct NodeStack*)malloc(sizeof(struct NodeStack));
39     if(TmpCell == NULL)
40         printf("Fatal Error: Out of space!!");
41     else
42     {
43         TmpCell->Element = X;
44         TmpCell->Next = S->Next;
45         S->Next = TmpCell;
46     }
47 }
48 
49 // Top 操作, 返回栈顶元素
50 ElementType Top(Stack S)
51 {
52     if (!StackIsEmpty(S))
53         return S->Next->Element;
54 
55     printf("Empty stack\n");
56     return 0;
57 }
58 
59 // Pop 操作, 通过删除表的前端元素实现
60 void Pop(Stack S)
61 {
62     PtrToNode FirstCell;
63 
64     if(StackIsEmpty(S))
65          printf("Empty stack\n");
66     else
67     {
68         FirstCell = S->Next;
69         S->Next = FirstCell->Next;
70         free(FirstCell);
71     }
72 }
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include "Stack.h"
 4 void main()
 5 {
 6     // 创建一个堆栈
 7     Stack stackchar;
 8     stackchar = CreateStack();
 9     for (int i=0; i< 5; ++i)
10     {
11         char cstr = '(';
12         Push(cstr+i, stackchar);
13     }
14     while(!StackIsEmpty(stackchar))
15     {
16         printf("%c ", Top(stackchar));
17         Pop(stackchar);
18     }
19 }

 参考:

原文地址:https://www.cnblogs.com/nobodyzhou/p/5461302.html