栈的实现-数组
前一篇写了链表栈,这一篇写数组栈
//首先,还是定义结构体
struct Node_A; typedef struct Node_A *Stack_A; typedef int ElementType_A; struct Node_A { int Capability; int TopOfStack; ElementType_A *ArrayStack;//这里的元素是一个用于指向数组的指针 };
//下面是具体实现
#define EOFEmpty (-1)//表示栈为空 #define MixStackSize (5)//栈的最小容量 int IsEmpty_A(Stack_A S ) { return S->TopOfStack == EOFEmpty;//如果栈顶的值为表示空的值,说明栈为空 } int IsFull_A( Stack_A S ) { return S->TopOfStack >= S->Capability;//如果栈顶的值大于等于栈的总容量,说明栈满了 } void error(char * str) { printf("%s",str); } /*创建一个容量为max的栈*/ Stack_A CreateStack_A( int Max ) { Stack_A S; if(Max < MixStackSize)//如果设置的栈的容量小鱼最小允许的容量,则报错。 error("stack is too small!"); S = (Stack_A)malloc(sizeof(struct Node_A));//为保存栈的信息的结构体申请一块内存 if(S==NULL) { error("out of space!"); return NULL; } S->TopOfStack = EOFEmpty;//设初值,栈顶值为-1,容量等于max,再申请一块内存作为数组栈,并将指针赋给ArrayStack。 S->Capability = Max; S->ArrayStack = (ElementType_A*)malloc(sizeof(ElementType_A)*Max); if(S->ArrayStack == NULL) { error("out of space!!"); return NULL; } return S; } void Push_A( ElementType_A X,Stack_A S ) { if(S->TopOfStack >= S->Capability) printf("stack full"); else S->ArrayStack[++S->TopOfStack]=X;//先移动指针,再赋值。 } ElementType_A Top_A( Stack_A S ) { if(!IsEmpty_A(S)) return( S->ArrayStack[S->TopOfStack] ); else { error("stack is empty!"); return 0; } } void Pop_A( Stack_A S ) { if(!IsEmpty_A(S)) S->TopOfStack--; else error("stack is empty!"); }

浙公网安备 33010602011771号