栈是一种特殊的线性表,其只允许在固定一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。
栈特性:后进先出(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;}
运行结果: