[数据结构与算法] : 栈的数组实现

头文件

 1 typedef int ElementType;
 2 
 3 #ifndef _STACK_AR_
 4 #define _STACK_AR_
 5 
 6 struct StackRecord;
 7 typedef struct StackRecord *Stack;
 8 
 9 int IsEmpty(Stack S);
10 int IsFull(Stack S);
11 Stack CreateStack(int MaxElements);
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 ElementType TopAndPop(Stack S);
18 
19 #endif

 

源文件

 1 #include "stackar.h"
 2 #include <malloc.h>
 3 #include "fatal.h"
 4 #include <stdlib.h>
 5 
 6 #define EmptyTOS (-1)
 7 #define MinStackSize (5)
 8 
 9 struct StackRecord
10 {
11     int Capacity;
12     int TopOfStack;
13     ElementType *Array;
14 };
15 
16 int IsEmpty(Stack S)
17 {
18     return S->TopOfStack == EmptyTOS;
19 }
20 
21 int IsFull(Stack S)
22 {
23     return S->TopOfStack == S->Capacity - 1;
24 }
25 
26 Stack CreateStack(int MaxElements)
27 {
28     Stack S;
29 
30     if(MaxElements < MinStackSize)
31         Error("Stack size is to small!");
32 
33     S = (Stack)malloc( sizeof(struct StackRecord) );
34     if( S == NULL )
35         FatalError("Out of Space!");
36 
37     S->Array = (ElementType*)malloc( sizeof(ElementType) * MaxElements );
38     if(S->Array == NULL)
39         FatalError("Out of Space!");
40     S->Capacity = MaxElements;
41     MakeEmpty(S);
42 
43     return S;
44 }
45 
46 void DisposeStack(Stack S)
47 {
48     if(S != NULL)
49     {
50         free(S->Array);
51         free(S);
52     }
53 }
54 
55 void MakeEmpty(Stack S)
56 {
57     if(S == NULL)
58         Error("Create stack first!");
59     else
60         S->TopOfStack = EmptyTOS;
61 }
62 
63 void Push(ElementType X, Stack S)
64 {
65     if( IsFull(S) )
66         Error("Full Srack!");
67     else
68         S->Array[++S->TopOfStack] = X;
69 }
70 
71 ElementType Top(Stack S)
72 {
73     if( IsEmpty(S) )
74     {
75         Error("Empty Srack!");
76         return 0; /* return value used to avoid warning */
77     }
78     else
79         return S->Array[S->TopOfStack];
80 }
81 
82 void Pop(Stack S)
83 {
84     if( IsEmpty(S) )
85         Error("Empty Srack!");
86     else
87         --S->TopOfStack;
88 }
89 
90 ElementType TopAndPop(Stack S)
91 {
92     if( IsEmpty(S) )
93     {
94         Error("Empty Srack!");
95         return 0; /* return value used to avoid warning */
96     }
97     else
98         return S->Array[S->TopOfStack--];
99 }

 

测试文件

 1 #include <stdio.h>
 2 #include "stackar.h"
 3 
 4 main( )
 5 {
 6     Stack S;
 7     int i;
 8 
 9     S = CreateStack( 12 );
10     for( i = 0; i < 10; i++ )
11         Push( i, S );
12 
13     while( !IsEmpty( S ) )
14     {
15         printf( "%d\n", Top( S ) );
16         Pop( S );
17     }
18 
19     DisposeStack( S );
20     return 0;
21 }

 

posted @ 2017-09-10 04:33  moon1992  阅读(238)  评论(0编辑  收藏  举报