文章目录
1 栈 stack
1.1 栈的概念及结构
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底
。栈中的数据元素遵守后进先出LIFO
(Last In First Out
)的原则。
- 压栈:栈的插入操作叫做进栈/压栈/入栈,
入数据在栈顶
- 出栈:栈的删除操作叫做出栈。
出数据也在栈顶
1.2 栈的实现
栈的实现一般可以使用数组或者链表实现
,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小
。
1.2.1 头文件stack.h声明
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
typedef int STDatatype;
typedef struct Stack
{
STDatatype* a;
int capacity;
int top;
}ST;
void StackInit(ST* ps);
void StackDestroy(ST* ps);
void StackPush(ST* ps, STDatatype);
void StackPop(ST* ps);
STDatatype StackTop(ST* ps);
bool StackEmpty(ST* ps);
int StackSize(ST* ps);
1.2.2 stack.c实现
#include "Stack.h"
void StackInit(ST* ps)
{
assert(ps);//断言
ps->a = (STDatatype*)malloc(sizeof(STDatatype) * 4);
if (ps->a == NULL)
{
perror("malloc fail");
exit(-1);
}
ps->top = 0;
ps->capacity = 4;
}
void StackDestroy(ST* ps)
{
assert(ps);
free(ps->a)