SqStack.h文件
#ifndef SQSTACK_H
#define SQSTACK_H
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
//定义栈的顺序存储结构
typedef struct SQSTACK
{
void *data[MAXSIZE]; //使用数组存储,void *为通用的元素类型
int top; //记录栈顶元素下标
} SqStack;
//初始化栈
SqStack* Init_SqStack();
//销毁栈
void Free_SqStack(SqStack* stack);
//判断栈是否为空,为空返回0,不为空返回-1
int SqStack_IsEmpty(SqStack* stack);
//进栈
void Push_SqStack(SqStack* stack,void* data);
//出栈
void Pop_SqStack(SqStack* stack);
//取栈顶元素
void* GetTop_SqStack(SqStack* stack);
#endif
SqStack.c文件
#include "SqStack.h"
//初始化栈
SqStack* Init_SqStack()
{
//分配顺序栈的存储空间
SqStack *stack = (SqStack *)malloc(sizeof(SqStack));
//初始化存储空间
int i;
for(i = 0; i < MAXSIZE; i++)
{
stack->data[i] = NULL;
}
//标记为栈空
stack->top = -1;
return stack;
}
//销毁栈
void Free_SqStack(SqStack* stack)
{
if(stack == NULL)
{
return;
}
free(stack);
stack = NULL;
}
//判断栈是否为空,为空返回0,不为空返回-1
int SqStack_IsEmpty(SqStack* stack)
{
if(stack == NULL)
{
return -1;
}
//当top下标 = -1则说明栈为空
if(stack->top == -1)
{
return 0;
}
return -1;
}
//进栈
void Push_SqStack(SqStack* stack,void* data)
{
if(stack == NULL || data == NULL)
{
return;
}
//说明栈满了
if(stack->top == MAXSIZE -1)
{
return;
}
//top下标+1
stack->top++;
//在栈顶插入元素
stack->data[stack->top] = data;
}
//出栈
void Pop_SqStack(SqStack* stack)
{
if(stack == NULL)
{
return;
}
//判断栈是否为空
if(stack->top == -1)
{
return;
}
//元素出栈
stack->data[stack->top] = NULL;
//top下标-1
stack->top--;
}
//取栈顶元素
void* GetTop_SqStack(SqStack* stack)
{
if(stack == NULL)
{
return NULL;
}
if(stack->top == -1)
{
return NULL;
}
//返回栈顶元素
return stack->data[stack->top];
}
main.c测试文件
#define _CRT_SECURE_NO_WARNINGS
#include "SqStack.h"
#include <string.h>
typedef struct STUDENT
{
int number; //学号
char name[20]; //姓名
}Student;
int main(void)
{
//创建栈
SqStack *stack = Init_SqStack();
//创建5个数据元素
Student s1 = {100,"zhangsan"};
Student s2 = {200 , "lisi"};
Student s3 = {300, "wangwu"};
Student s4 = {400 , "zhaoliu"};
Student s5 = {500 , "xiaoming"};
//将元素入栈
printf("-----------元素入栈--------------\n\n");
Push_SqStack(stack, (void *)&s1);
Push_SqStack(stack, (void *)&s2);
Push_SqStack(stack, (void *)&s3);
Push_SqStack(stack , (void *)&s4);
Push_SqStack(stack ,(void *)&s5);
printf("-----------访问栈顶元素--------------\n");
//访问栈中的元素
while(stack->top > -1)
{
//访问栈顶元素
Student *temp = (Student *)GetTop_SqStack(stack);
printf("number = %d , name = %s\n" , temp->number , temp->name);
//元素出栈
Pop_SqStack(stack);
}
printf("--------------释放栈----------------\n");
//释放栈
Free_SqStack(stack);
return 0;
}
测试结果: