栈的数组实现
栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶(top)。对栈的基本操作有Push(进栈)和Pop(出栈),而数组的实现就比链表简单一些。
类型声明代码
#include <stdio.h>
#include <stdlib.h>
#define ElementType int
#define MaxSize 100
typedef struct SNode *Stack;
struct SNode
{
ElementType Data[MaxSize];
int Top;
};
Stack PtrS; //定义结构体指针
栈的创建
Stack CreateStack() //要为结构体指针malloc一个空间,否则PtrS为NULL
{
Stack Ptrs;
PtrS = malloc(sizeof(struct SNode));
if (PtrS == NULL)
{
printf("Struct pointer is NULL!!!\n");
}
PtrS->Top = -1;
}
注意:如果没有先创建一个空栈,而直接通过结构体指针PtrS去访问结构体,是无法访问的。在创建一个空栈之前PtrS所存储的地址为0
栈的Push
void Push(ElementType X,Stack PtrS)
{
if (PtrS->Top == MaxSize-1)
{
printf("Stack Full!!\n");
}
else
{
PtrS->Data[++PtrS->Top] = X;
}
}
栈的Pop
void Pop(Stack PtrS)
{
if (PtrS->Top == -1)
{
printf("Stack Empty!!!!\n");
}
else
{
PtrS->Top--;
}
}
输出栈
void PrintStack(Stack PtrS)
{
for (int i=PtrS->Top;i>=0;i--)
{
printf(" %d", PtrS->Data[i]);
if (PtrS->Top==i){
printf("<-Top");
}
printf("\n");
}
if (PtrS->Top!=-1){
printf("------------Bottom\n");
}
}