顺序栈的实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <Windows.h>
#include "SeqStack.h"
struct seqStack
{
void* data[MAX];
int size;
};
//初始化
void* initSeqStack()
{
struct seqStack* stack = malloc(sizeof(struct seqStack));
stack->size = 0;
return stack;
}
//入栈
void pushSeqStack(void* stack, void* data)
{
if (NULL==stack)
{
return;
}
if (NULL==data)
{
return;
}
struct seqStack* mystack = stack;
mystack->data[mystack->size] = data;
mystack->size++;
}
//出栈
void popSeqStack(void* stack)
{
struct seqStack* mystack = stack;
if (mystack->size==0)
{
return;
}
mystack->data[mystack->size] = NULL;
mystack->size--;
}
//获得栈顶元素
void* topSeqStack(void* stack)
{
if (NULL==stack)
{
return;
}
struct seqStack* mystack = stack;
if (mystack->size==0)
{
return NULL;
}
return mystack->data[mystack->size - 1];
}
//获得栈的大小
int sizeSeqStack(void* stack)
{
struct seqStack* mystack = stack;
return mystack->size;
}
//销毁栈
void destroySeqStack(void* stack)
{
//struct seqStack* mystack = stack;
free(stack);
stack = NULL;
}
//遍历栈
void foreachSeqStack(void *stack,void(*foreach)(void *))
{
if (NULL==stack)
{
return;
}
if (NULL==foreach)
{
return;
}
struct seqStack* mylist = stack;
for (int i = 0; i < mylist->size; i++)
{
foreach(mylist->data[i]);
}
}
struct Person
{
char name[64];
int age;
};
void foreach(void *data)
{
if (NULL==data)
{
return;
}
struct Person* mydata = data;
printf("%s %d\n",mydata->name,mydata->age);
}
test()
{
void* stack = initSeqStack();
//创建数据
struct Person p1 = { "aaa",10 };
struct Person p2 = {"bbb",20 };
struct Person p3 = { "ccc",30 };
struct Person p4 = { "ddd",40 };
struct Person p5 = { "eee",50 };
//插入数据
pushSeqStack(stack, &p1);
pushSeqStack(stack, &p2);
pushSeqStack(stack, &p3);
pushSeqStack(stack, &p4);
pushSeqStack(stack, &p5);
//输出栈中所有元素
foreachSeqStack(stack,foreach);
printf("----------------------------------------\n");
while (sizeSeqStack(stack)>0)
{
//获得栈顶元素
struct Person* m = (struct Person*)topSeqStack(stack);
//打印
printf("%s %d\n",m->name,m->age);
//弹出栈中元素
popSeqStack(stack);
}
destroySeqStack(stack);
stack = NULL;
}
int main(void)
{
test();
system("pause");
return EXIT_SUCCESS;
}