栈的定义:先进后出
栈是一种线性表,但是栈限制了操作,它只允许在一端进行插入和删除。
栈顶:栈顶是允许插入和删除的那一端
栈底:栈底是不允许插入和删除的
栈的实现:
一般在实现栈的时候,通常用数组去模拟实现栈的顺序存储。
//.h 文件
#ifndef SEQSTACK_H
#define SEQSTACK_H
#define MAX_SIZE 1024
#define SEQSTACK_TRUE 1
#define SEQSTACK_FALSE 0
//定义栈的结构体
typedef struct SEQSTACK
{
void* data[MAX_SIZE]; //用来模拟栈的存储空间
int size; //用来记录栈的大小
}SeqStack;
//栈的初始化
SeqStack* Init_SeqStack();
//插入
void Insert_SeqStack(SeqStack* stack,void* data);
//弹出栈
void Pop_SeqStack(SeqStack* stack);
//返回栈顶元素
void* Top_SeqStack(SeqStack* stack);
//返回栈中元素的个数
int Size_SeqStack(SeqStack* stack);
//判断栈是否为空
int IsEmpty_SeqStack(SeqStack* stack);
//清空栈
void Clear_SeqStack(SeqStack* stack);
//释放栈的内存
void FreeSpace_SeqStack(SeqStack* stack);
#endif
.c 文件
#include <stdio.h>
#include <stdlib.h>
#include "SeqStack.h"
//栈:先进后出 规则
// 不能遍历
// 栈的顺序存储:
// 基本概念:栈的顺心存储结构简称顺序栈:利用一组地址连续的存储单元一次存放自栈低到栈顶的数据元素
//栈的初始化
SeqStack* Init_SeqStack()
{
SeqStack* stack = (SeqStack*)malloc(sizeof(SeqStack));
for(int i = 0; i < MAX_SIZE; i++)
{
stack->data[i] = NULL; //将栈空间中的每一个单元都置为NULL
}
stack->size = 0; //将栈元素个数置为0
return stack;
}
//插入
void Push_SeqStack(SeqStack* stack,void* data)
{
//只能在栈顶插入元素
if(stack == NULL) return;
if(data == NULL) return;
//还需判断栈是否已满
if(stack->size == MAX_SIZE) return;
stack->data[stack->size] = data;
stack->size++;
}
//弹出栈
void Pop_SeqStack(SeqStack* stack)
{
//只能弹出栈顶元素
if(stack == NULL) return;
//需要判断栈中是否已经为空
if(stack->size == 0) return;
//将弹出的单元置空
stack->data[stack->size - 1] = NULL;
stack->size--;
}
//返回栈顶元素
void* Top_SeqStack(SeqStack* stack)
{
if(stack == NULL) return;
if(stack->size == 0) return;
return stack->data[stack->size - 1];
}
//返回栈中元素的个数
int Size_SeqStack(SeqStack* stack)
{
if(stack == NULL) return -1;
return stack->size;
}
//判断栈是否为空
int IsEmpty_SeqStack(SeqStack* stack)
{
if(stack == NULL) return -1;
if(stack->size == 0) return SEQSTACK_TRUE;
return SEQSTACK_FALSE;
}
//清空栈
void Clear_SeqStack(SeqStack* stack)
{
if(stack == NULL) return;
if(stack->size == 0) return;
for(int i = stack->size - 1; i >= 0; i--)
{
stack->data[i] = NULL;
}
stack->size = 0;
}
//释放栈的内存
void FreeSpace_SeqStack(SeqStack* stack)
{
if(stack == NULL) return;
free(stack);
}
int main()
{
return 0;
}
#endif