头文件

#ifndef SEQSTACK
#define SEQSTACK
#define MAX_SIZE 1024
typedef struct SEQSTACK
{
void* data[MAX_SIZE];
int size;
}SeqStack;
typedef void (*PRINTDATA)(void* data);
void PrintStack(void* data, PRINTDATA print);
//初始化栈
SeqStack* InitSeqStack();
//入栈
void PushSeqStack(SeqStack* stack, void* data);
//返回栈顶元素
void* TopSeqStack(SeqStack* stack);
//出栈
void PopSeqStack(SeqStack* stack);
//判断栈是否为空
bool IsEmpty(SeqStack* stack);
//返回栈元素个数
int GetCount(SeqStack* stack);
//清空栈
void clearSeqStack(SeqStack* stack);
//销毁栈
void FreeSeqStack(SeqStack* stack);
#endif

cpp

#include "SeqStack.h"
#include
#include<assert.h>
using namespace std;
void PrintStack(void* data, PRINTDATA print)
{
if (data == NULL)
return;
print(data);
}
//初始化栈
SeqStack* InitSeqStack()
{
SeqStack* stack = (SeqStack*)malloc(sizeof(SeqStack));
for (int i = 0; i < MAX_SIZE; i++)
{
if(stack->data[i]!=NULL)
{
stack->data[i] = nullptr;
}
}
stack->size = 0;
return stack;
}
//入栈
void PushSeqStack(SeqStack* stack, void* data)
{
if (data == NULL || stack == NULL||stack->size==MAX_SIZE )
{
return;
}
stack->data[stack->size] = data;
stack->size++;
}
//返回栈顶元素
void* TopSeqStack(SeqStack* stack)
{
if (stack->size == 0)
{
return NULL;
}
if (stack == NULL)
{
return NULL;
}
return stack->data[stack->size - 1];
}
//出栈
void PopSeqStack(SeqStack* stack)
{
if (stack->size == 0)
{
return ;
}
if (stack == NULL)
{
return ;
}
stack->data[stack->size - 1] = NULL;//可省略.
stack->size--;
}
//判断栈是否为空
bool IsEmpty(SeqStack* stack)
{
if (stack->size > 0)
{
return true;
}
else return false;
}
//返回栈元素个数
int GetCount(SeqStack* stack)
{
return stack->size;
}
//清空
void clearSeqStack(SeqStack* stack)
{
if (stack == NULL)
{
return;
}
for (int i = 0; i < stack->size; i++)
{
stack->data[i] = NULL;
}
stack->size = 0;
}
//销毁栈
void FreeSeqStack(SeqStack* stack)
{
if (stack == NULL)
{
return;
}
free( stack);
}
typedef struct PERSON
{
char name[64];
int age;
}Person;
void myprint(void* data)
{
if (data != NULL)
{
Person* p = (Person*)data;
cout << p->name << p->age;
}
else return;
}
int main()
{
//初始化栈
SeqStack* stack = InitSeqStack();
Person p1 = { "aaa",10 };
Person p2 = { "bbb",11 };
Person p3 = { "ccc",12 };
Person p4 = { "ddd",13 };
//入栈
PushSeqStack(stack, &p1);
PushSeqStack(stack, &p2);
PushSeqStack(stack, &p3);
PushSeqStack(stack, &p4);
PrintStack(TopSeqStack(stack), myprint);
//输出
while (stack->size > 0)
{
	Person* person = (Person*)TopSeqStack(stack);
	cout << person->name << ":" << person->age << endl;
	//stack->size--;
	PopSeqStack(stack);
}

FreeSeqStack(stack);
cout << "===================================" << endl;
PrintStack(TopSeqStack(stack), myprint);
return 0;}