C栈的顺序存储 接口实现

#define MAX 1024
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
struct SStack
{
    void * data[MAX];//栈的数组
    int m_Size;//栈大小
};
typedef void* SeqStack;

//初始化栈
SeqStack intt_SeqStack()
{
    struct SStack *myStack = 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 = 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 = stack;
        if(mystack->m_Size == 0)
        {
            return;
        }
        
        mystack->data[mystack->m_Size-1]=NULL;
        mystack->m_Size--;
    }
//返回栈顶
void * top_SeqStack(SeqStack stack)
     {
        if(stack == NULL)
        {
            return NULL;
        }
        
        struct SStack * mystack = stack;
        if(mystack->m_Size == 0)
        {
            return NULL;
        }
        return mystack->data[mystack->m_Size-1];
    }
//返回栈大小
int size_SeqStack(SeqStack stack)
                                     {
        if(stack == NULL)
        {
            return -1;
        }
        
        struct SStack * mystack = stack;
        
        return mystack->m_Size;
    }
//判断栈是否为空
int isEmpty_SeqStack(SeqStack stack)
                                     {
        if(stack == NULL)
        {
            return -1;//返回-1代表真 空栈
        }
        struct SStack * mystack = stack;
        
        if(mystack->m_Size == 0)
        {
            return 1;
        }
        return 0;//返回0代表不是空栈
    }
//销毁栈
void destroy_SeqStack(SeqStack stack)
                                     {
        if(stack == NULL)
        {
            return;
        }
        
        free(stack);
        stack = NULL;
    }
struct Person
{
        char name[64];
        int age;
};
void test1()
                                     {
        //初始化栈
        SeqStack myStack = intt_SeqStack();
        
        //创建数据
        struct Person p1 = {"aaa",10};
        struct Person p2 = {"bbb",10};
        struct Person p3 = {"ccc",10};
        struct Person p4 = {"ddd",10};
        struct Person p5 = {"eee",10};
        
        //入栈
        push_SeqStack(myStack, &p1);
        push_SeqStack(myStack, &p2);
        push_SeqStack(myStack, &p3);
        push_SeqStack(myStack, &p4);
        push_SeqStack(myStack, &p5);
        
        while(isEmpty_SeqStack(myStack) == 0) //栈不为空,查看栈顶元素 出栈
        {
            struct Person *p = top_SeqStack(myStack);
            printf("姓名:%s 年龄; %d\n",p->name,p->age);
            //出栈
            pop_SeqStack(myStack);
        }
        printf("栈的元素个数为;%d\n",size_SeqStack(myStack));
        
        //销毁栈
        destroy_SeqStack(myStack);
        
    }
int main()
{
    test1();
    system("pause");
    return 0;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值