栈的概念

栈是一种特殊的线性表,其只允许在固定一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。

栈特性:后进先出(LILO)特殊线性表
栈功能:将数据从一种序列改变到另一种序列。

stack.png

栈的基本操作

stack.h

#define _CRT_SECURE_N0_WARNINGS 1
#pragma once

#define  Max_size  100
#include 
#include 

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

运行结果:
stack.png

你可能感兴趣的:(栈)