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