/*
MyArryLinkstack.h
*/
#ifndef _MYARRYLINKSTACK_H_
#define _MYARRYLINKSTACK_H_
#include <stdlib.h>
#define ElementType int
#define EmptyTOS (-1)
#define MinStackSize (5)
typedef struct {
int Capacity;
int Top;
ElementType *Array;
}StackRecord, *pStack;
int IsEmpty(pStack S);
int IsFull(pStack S);
pStack CreatStack(int MaxElements);
void DisposeStack(pStack S);
void MakeEmpty(pStack S);
ElementType GetTop(pStack S);
void Push(pStack S, ElementType x);
void Pop(pStack S);
ElementType TopAndPop(pStack S);
#endif
/*
MyArryLinkstack.c
*/
#include "MyArryLinkstack.h"
/*栈的创建,数组实现*/
pStack CreatStack(int MaxElements)
{
pStack S;
if (MaxElements < MinStackSize)
perror(" Stack is too small!");
S =(pStack) malloc(sizeof(StackRecord));
if (S == NULL)
perror("Out of Space!");
S->Array = malloc(sizeof(ElementType) * MaxElements);
if (S->Array == NULL)
perror("Out of Space!!!");
S->Capacity = MaxElements;
MakeEmpty(S);
return S;
}
/*创建一个空栈*/
void MakeEmpty(pStack S)
{
S->Top = EmptyTOS;
}
/*判断是否空栈*/
int IsEmpty(pStack S)
{
return S->Top == EmptyTOS;
}
/*判断是否满栈*/
int IsFull(pStack S)
{
return S->Top == S -> Capacity - 1;
}
/*进栈*/
void Push(pStack S, ElementType x)
{
if (IsFull(S))
perror("Full Stack!");
else
S->Array[++S->Top] = x;
}
/*出栈*/
void Pop(pStack S)
{
if (IsEmpty(S))
perror("Empty Stack!");
else
S->Top--;
}
/*取得栈顶元素*/
ElementType GetTop(pStack S)
{
if (IsEmpty(S)){
perror("Empty Stack!");
return 0;
}
else
return S->Array[S->Top];
}
/*
main.c
*/
/* LinkStackTest.c */
#include <stdio.h>
#include "MyArryLinkstack.h"
int main()
{
pStack pS = NULL;
int a;
pS = CreatStack(5);
Push(pS, 1);
a = GetTop(pS);
Push(pS, 3);
a = GetTop(pS);
Push(pS, 5);
a = GetTop(pS);
Push(pS, 7);
a = GetTop(pS);
Push(pS, 9);
a = GetTop(pS);
Pop(pS);
a = GetTop(pS);
}