/*栈的顺序存储*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 1024
struct SStack
{
//栈中数组
void* data[MAX];
//栈大小
int m_Size;
};
typedef void* SeqStack;
//初始化栈
SeqStack init_SeqStack()
{
struct SStack * myStack = (SStack*)malloc(sizeof(struct SStack));
if (myStack == NULL)
{
return NULL;
}
memset(myStack->data, 0, sizeof(void*) * MAX);
myStack->m_Size = 0;
return myStack;
}
//入栈
void push_SeqStack(SeqStack stack, void* data)
{
//本质 数组尾插
if (stack == NULL)
{
return;
}
if (data == NULL)
{
return;
}
struct SStack* mystack = (SStack*)stack;
//判断栈是否满
if (mystack->m_Size == MAX)
{
return;
}
//数组进行尾插
mystack->data[mystack->m_Size] = data;
//更新栈大小
mystack->m_Size++;
}
//出栈
void pop_SeqStack(SeqStack stack)
{
//出栈的本质 数组尾删
if (stack == NULL)
{
return;
}
struct SStack* mystack = (SStack*)stack;
if (mystack->m_Size == 0)
{
return;
}
mystack->data[mystack->m_Size - 1];
mystack->m_Size--;
}
//返回栈顶
void* top_SeqStack(SeqStack stack)
{
//本质 返回最后的最后一个元素
if (stack == NULL)
{
return NULL;
}
struct SStack* mystack = (SStack*)stack;
if (mystack->m_Size == 0)
{
return NULL;
}
return mystack->data[mystack->m_Size - 1];
}
//反回栈大小
int size_SeqStack(SeqStack stack)
{
if (stack == NULL)
{
return NULL;
}
struct SStack* mystack = (SStack*)stack;
return mystack->m_Size;
}
//判断栈是否为空
int isEmpty_SeqStack(SeqStack stack)
{
if (stack == NULL)
{
return -1; //传入空指针 返回真 栈也是空
}
struct SStack* mystack = (SStack*)stack;
if (mystack->m_Size == 0)
{
return 1; //1代表真 栈确实为空
}
return 0; //不为空 假
}
//销毁
void destroy_SeqStack(SeqStack stack)
{
if (stack == NULL)
{
return;
}
free(stack);
stack = NULL;
}
struct Person
{
char name[64];
int age;
};
//测试栈
void test01()
{
//创建栈
SeqStack myStack = init_SeqStack();
//创建数据
struct Person p1 = { "aaa",11 };
struct Person p2 = { "bbb",22 };
struct Person p3 = { "ccc",33 };
struct Person p4 = { "ddd",44 };
struct Person p5 = { "eee",55 };
//入栈
push_SeqStack(myStack, &p1);
push_SeqStack(myStack, &p2);
push_SeqStack(myStack, &p3);
push_SeqStack(myStack, &p4);
push_SeqStack(myStack, &p5);
printf("栈的大小为:%d\n", size_SeqStack(myStack));
while (isEmpty_SeqStack(myStack)==0)//栈不为空 开始查看栈顶,并且出栈
{
struct Person* pTop = (Person*)top_SeqStack(myStack);
printf("栈顶元素- 姓名:%s 年龄:%d\n", pTop->name, pTop->age);
//出栈
pop_SeqStack(myStack);
}
printf("栈的大小为:%d\n", size_SeqStack(myStack));
}
int main()
{
test01();
system("pause");
return 0;
}
栈(C语言实现)
最新推荐文章于 2024-07-20 19:39:28 发布