(简单数据结构)用数组模拟实现栈栈帧

栈是一种常见的数据结构。用通俗的话来说就像一个箱子,往箱子里放东西最先放进去的最后拿出来,也就是大家说的后进先出,先进后出。最先进来的元素保存在栈的底部依次往上堆积直到栈溢出为止,而取元素时必须自上而下取出元素,想要拿到下面的元素必须先拿出上面的元素。

#pragma once
//1:实现栈和队列
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>

typedef int DataType;
#define copacity 100//定义一个copacity给数组一个空间
typedef struct Stack
{
    DataType* _array;//定义数组模拟栈的结构
    size_t _top; //栈底
    size_t _end;//栈顶
}Stack;

// 栈的实现接口 
void StackInit(Stack* s)//栈的初始化
{
    s->_array = (DataType*)malloc(sizeof(DataType)*copacity);//给数组开辟空间
    memset(s->_array, 0, sizeof(DataType)*copacity);//用memset给数组初始化
    s->_top = s->_end = 0;
}
void StackPush(Stack* s, DataType x)//压栈
{
    if (s->_end == copacity)//判断栈是否满了如果满了给栈开辟另外的空间
        s->_array = (DataType *)realloc(s->_array, sizeof(DataType)*copacity);
    s->_array[s->_end] = x;
    s->_end++;
}
void StackPop(Stack* s)//出栈
{
    if (s->_end == s->_top)//如果栈为空返回
        return;
    s->_end--;
}
DataType StackTop(Stack* s)//返回栈底数据
{
    return s->_array[s->_top];
}
size_t StackSize(Stack* s)//求栈的长度
{
    return (s->_end - s->_top);
}
int StackEmpty(Stack* s)
{
    return (s->_top != s->_end);
}
void StackTest1()
{
    Stack s;
    StackInit(&s);
    StackPush(&s, 1);
    StackPush(&s, 2);
    StackPush(&s, 3);
    StackPush(&s, 4);
    StackPop(&s);
    StackPop(&s);
    printf("the top is:%d\n", StackTop(&s));
    printf("the stack size is: %d\n", StackSize(&s));
}


猜你喜欢

转载自blog.csdn.net/weixin_40853073/article/details/79810832