栈的数组实现

来源:互联网 发布:逗屋网络 编辑:程序博客网 时间:2024/06/05 11:56

栈的数组实现,顾名思义, 就是不适用链表指针的形式的栈.
了解链表的基本用法,也就很清楚栈的数组原理

思路将在代码中解释,

#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;}