栈的概念
栈是一种特殊的线性表,其只允许在固定一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。
栈特性:后进先出(LILO)特殊线性表
栈功能:将数据从一种序列改变到另一种序列。
栈的基本操作
stack.h
#define _CRT_SECURE_N0_WARNINGS 1
#pragma once
#define Max_size 100
#include <stdio.h>
#include <assert.h>
typedef int StackDataType;
typedef struct Stack{
StackDataType arr[Max_size];
int top;
}Stack;
//基本操作
void StackInit(Stack* pStack)
{
pStack->top = 0;
}
void StackDestory(Stack* pStack)
{
pStack->top = 0;
}
void StackPush(Stack* pStack, StackDataType data)
{
//判断栈内是否有空间存放数据
assert(pStack->top < Max_size);
//进行压栈
pStack->arr[pStack->top++] = data;
}
void StackPop(Stack* pStack)
{
//判断栈不为空
assert(pStack->top < 0);
//进行出栈
pStack->top--;
}
StackDataType StackTop(Stack* pStack)
{
//判断栈不为空
assert(pStack->top < 0);
//返回栈顶元素
return pStack->arr[pStack->top-1];
}
int StackSize(Stack* pStack)
{
return pStack->top;
}
int StackFull(Stack* pStack)
{
return pStack->top >= Max_size;
}
int StackEmpty(Stack* pStack)
{
return pStack->top <=0;
}
//--------------------------------------------
void TestStack()
{
Stack stack;
StackInit(&stack);
for (int i = 0; i < 10; i++)
{
StackPush(&stack, i);
}
for (int i = 0; i < 10; i++)
printf("%d ", stack.arr[i]);
}
main.c
#define _CRT_SECURE_N0_WARNINGS 1
#include "stack.h"
int main()
{
TestStack();
return 0;
}
运行结果: