1.Stack.h
#pragma once
#include <assert.h>
#include <stdlib.h>
#include <String.h>
// 栈实现
typedef int SDataType;
#define MAX_SIZE (100)
//栈结构定义:数组 栈顶
typedef struct Stack {
SDataType array[MAX_SIZE];
int top; // 含义和顺序表的size一样
// 1.表示有效数据个数
// 2. top 下标表示当前可用位置
} Stack;
//初始化
void StackInit(Stack *pS) {
assert(pS != NULL);
pS->top = 0;
}
// 入(压)栈
void StackPush(Stack *pS, SDataType data) {
assert(pS != NULL);
assert(pS->top < MAX_SIZE);
pS->array[pS->top++] = data;
}
// 出栈
void StackPop(Stack *pS) {
assert(pS != NULL);
assert(pS->top > 0);
pS->top--;
}
// 返回栈顶元素,
SDataType StackTop(Stack *pS) {
assert(pS != NULL);
assert(pS->top > 0);
return pS->array[pS->top - 1];
}
// 判断栈是否为空
// 1 表示空, 0 表示非空
int StackIsEmpty(Stack *pS) {
return pS->top == 0 ? 1 : 0;
}
// 返回栈数据个数
int StackSize(Stack *pS) {
return pS->top;
}
// 栈拷贝
void StackCopy(Stack *pDest, Stack *pSrc) {
pDest->top = pSrc->top;
memcpy(pDest->array, pSrc->array, sizeof(SDataType) * pSrc->top);
}
void TestStack() {
Stack stack;
StackInit(&stack);
StackPush(&stack, 9);
StackPush(&stack, 5);
StackPush(&stack, 7);
StackPush(&stack, 3);
}
2.Main.c
#include "Stack.h"
int main()
{
TestStack();
return 0;
}