1. 堆栈
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
2. 堆栈的两种实现
2.1 数组实现堆栈
头文件声明函数.h
#pragma once
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#ifdef __cplusplus
extern "C"{
#endif // __cplusplus
#define MAX 1024
//定义顺序栈的结构体,其中数组中存放指向元素的指针
struct seqstack
{
void * data[MAX];//存放数据的数组
int size;//栈中元素个数
};
typedef void * firststack;//定义void * 指针方便用户阅读
//初始化
firststack Initialization();
//入栈
void push_stack(firststack stack,void * data);
//出栈
void sport_stack(firststack stack);
//获得栈顶元素
void * Top_stack(firststack stack);
//获得栈的元素个数
int Size_stack(firststack stack);
//销毁
void Destroy_stack(firststack stack);
#ifdef __cplusplus
}
#endif // __cplusplus
数组栈函数的实现
#include"Sequencestack.h"
//顺序栈的结构
// struct seqstack
// {
// void * data[MAX];//存放数据的数组
// int size;//栈中元素个数
// };
//typedef void * firststack;
//初始化
firststack Initialization()
{
struct seqstack * mystack = (struct seqstack *)malloc(sizeof(struct seqstack));//分配内存空间
memset(mystack,0,sizeof(struct seqstack));//初始化内存空间
mystack->size = 0;
return mystack;
}
//入栈
void push_stack(firststack stack,void * data)
{
if (NULL == stack)
{
return;
}
if (NULL == data)
{
return;
}
struct seqstack * mystack = (struct seqstack *)stack;//将无类型指针转换为栈指针
mystack->data[mystack->size] = data