码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-09-10 10:07:21      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:str   use   min   fat   源文件   实现   null   type   log   

头文件

 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 }

 

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

标签:str   use   min   fat   源文件   实现   null   type   log   

原文地址:http://www.cnblogs.com/moon1992/p/7500059.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!