栈的数组实现,顾名思义, 就是不适用链表指针的形式的栈.
了解链表的基本用法,也就很清楚栈的数组原理
思路将在代码中解释,
#include <stdio.h>
#include <stdlib.h>
//定义一个结构体, 包含了一个数组,num 代表数组的编号, 即第几个元素
struct Node
{
int num;
int *a;
};
typedef struct Node *T;
//将num与-1 判断, num = -1 即表示该数组的元素没有初始化
int IsEmpty(T node)
{
return node->num == -1;
}
//创建,并初始化
T Creat(T node, int SIZE)
{
if(node == NULL)
node = (T)malloc(sizeof(struct Node));
//初始化数组
node->a = (int *)malloc(sizeof(int) * SIZE);
//将num 初始化为 -1
node->num = -1;
if (node->a == NULL)
return 0;
return node;
}
//为数组进行赋值, 每赋值一个, num++; 即在数组顶压一个数, 即进栈
T Inset(T node, int m)
{
node->a[++node->num] = m;
return node;
}
//返回数组最后进的元素
int Top(T node)
{
if (!IsEmpty(node))
return node->a[node->num];
return 0;
}
//删除最后进入数组的元素, 即出栈
void Pop(T node)
{
if (!IsEmpty(node))
--node->num;
}
int main()
{
int i; i = 0;
int SIZE;
scanf("%d", &SIZE);
T node = NULL;
node = Creat(node, SIZE);
while (i < 5)
{
int m;
scanf("%d", &m);
node = Inset(node, m);
i++;
}
Pop(node);
printf("%d", Top(node));
system("pause");
return 0;
}