其他分享
首页 > 其他分享> > 栈的顺序存储

栈的顺序存储

作者:互联网

一.初始化栈

二.入栈

三.出栈

四.获取栈顶元素

五.栈的大小

六.判断栈是否为空

七.销毁栈

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;
}

标签:SeqStack,struct,void,stack,seqStack,myStack,顺序存储
来源: https://blog.csdn.net/weixin_66044522/article/details/122498732