一.初始化栈
二.入栈
三.出栈
四.获取栈顶元素
五.栈的大小
六.判断栈是否为空
七.销毁栈
contact.h (头文件)
#pragma once
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 1024
struct SStack
{
void*data[MAX]//数组
int m_Size//元素个数
};
typedef void*seqStack
//一.初始化栈
seqStack int_SeqStack();
//二.入栈
void push_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 destroy_SeqStack(seqStack stack);
tset.c
#include"contact.h"
//测试
struct Person
{
char name[64];
int age;
};
void tset()
{
//准备数据
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};
//初始化栈
seqStack stack =init_SeqStack();
//入栈
push_SeqStack(stack,&p1);
push_SeqStack(stack,&p2);
push_SeqStack(stack,&p3);
push_SeqStack(stack,&p4);
push_SeqStack(stack,&p5;
while(isEmpty_SeqStack(stack) ==0)//如果栈部位空 进行访问栈顶元素, 并且出栈
{
return Person*pTop= top_SeqStack(stack)//栈顶元素
printf("栈顶元素 姓名:%s 年龄:%d\n",pTop->name,pTop->age);
//出栈
pop_SeqStack(stack);
}
//栈的大小
int size = size_SeqStack(stack);
printf("栈的大小:%d\n",size);
//销毁栈
destroy_SeqStack(stack);
}
int main()
{
tset()
system("pause");
return EXIT_SUCCESS;
}
contact.c(源文件)
#include"contact.h"
//一.初始化栈
seqStack int_SeqStack()
{
struct SStack* stack = malloc(sizeof(struct SStack));
if(stack ++NULL)
{
return NULL;
}
memset(stack->data,0,sizeof(void*)*MAX);
stack->m_Size=0;
}
//二.入栈
void push_SeqStack(seqStack stack,void * data)
{
if(NULL == stack)
{
return;
}
if(NULL==data)
{
return ;
}
//判断是否已经满栈
struct SStack*myStack = stack;
if(myStack->m_Size==MAX)
{
return;
}
myStack->data[myStack->m_Size]=data;//入栈,尾插
myStack->m_Size++;//更新数据大小
}
//三.出栈
void pop_SeqStack(seqStack stack)
{
if(NULL== stack)
{
return ;
}
//如果是空栈 不执行出栈
struct SStack *myStack=stack;
if(myStack->m_Size<0)
{
return;
}
//执行出栈
myStack->data[myStack->m_Size-1]==NULL;
//更新栈的大小
myStack->m_Size--;
}
//四.获取栈顶元素
void *top_SeqStack(seqStack stack)
{
if(NULL == stack)
{
return NULL;
}
struct SStack* myStack = stack;
//如果给我们的是空栈 返回NULL
if(myStack->m_Size == 0)
{
return NULL;
}
return myStack->data[myStack->m_Size-1]
}
//五.栈的大小
int size_SeqStack(seqStack stack)
{
if(NULL==stack)
{
return -1;
}
struct SStack *myStack=stack;
re turn myStack->m_Size;
}
//六.判断栈是否为空
int isEmpty_SeqStack(seqStack stack)
{
if(NULL == stack)
{
return 1;//真
}
struct SStack*myStack= stack;
if(myStack->m_Size<0)
{
return 1;//真
}
return 0;
}
//七.销毁栈
void destroy_SeqStack(seqStack stack)
{
if(NULL == stack)
{
return NULL;
}
free(stack);
stack=NULL;
}