C语言_顺序栈_sequenceStack

01 - sequenceStack.h 

#include <stdlib.h>
#include <string.h>

#define MAX 1024
struct seqStack
{
    void *m_pAddress[MAX];
    int m_Size;
};

#ifdef __cplusplus
extern "C" {
#endif

    void *init_SeqStack();

    void push_SeqStack(void *stk, void *data);

    void pop_SeqStack(void *stk);

    void *top_SeqStack(void *stk);

    int getSize_seqStack(void *stk);

    void destroy_seqStack(void *stk);

#ifdef __cplusplus
}
#endif

02 - sequenceStack.c  

#include "sequenceStack.h"

typedef struct seqStack SeqSTK;

void *init_SeqStack()
{
    SeqSTK *pStk = (SeqSTK *)malloc(sizeof(SeqSTK));
    if(NULL == pStk)
    {
        return NULL;
    }

    int i;
    for(i = 0; i < MAX; i++)
    {
        pStk->m_pAddress[i] = NULL;
    }

    return pStk;
}

void push_SeqStack(void *stk, void *data)
{
    if(NULL == stk || NULL == data)
    {
        return;
    }

    SeqSTK *pStk = (SeqSTK *)stk;
    if(pStk->m_Size == MAX)
    {
        return;
    }

    pStk->m_pAddress[pStk->m_Size] = data;
    pStk->m_Size++;
}
void pop_SeqStack(void *stk)
{
    if(NULL == stk)
    {
        return;
    }

    SeqSTK *pStk = (SeqSTK *)stk;
    if(pStk->m_Size == 0)
    {
        return;
    }

    pStk->m_pAddress[pStk->m_Size-1] = NULL;
    pStk->m_Size--;
}

void *top_SeqStack(void *stk)
{
    if(NULL == stk)
    {
        return NULL;
    }
    SeqSTK *pStk = (SeqSTK *)stk;
    if(pStk->m_Size == 0)
    {
        return NULL;
    }

    return pStk->m_pAddress[pStk->m_Size-1];
}
int getSize_seqStack(void *stk)
{
    if(NULL == stk)
    {
        return -1;
    }


    SeqSTK *pStk = (SeqSTK *)stk;
    return pStk->m_Size;
}

void destroy_seqStack(void *stk)
{
    if(NULL == stk)
    {
        return;
    }

    free (stk);
    stk = NULL;
}

03 - 测试代码 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "sequenceStack.h"

typedef struct Employee
{
    char  name[64];
    int   age;
    int   jobNumber;
}EMP;

void MyPrint(void *data)
{
    if(data)
    {
        EMP *ep = (EMP *)data;
        printf("Name : %s, Age : %d, jobNumber : %d\n", ep->name, ep->age, ep->jobNumber);
    }
}


void test()
{   
    EMP *ep = (EMP *)malloc(sizeof(EMP) * 6);
    if(NULL == ep)
    {
        return;
    }

    int i;
    for(i = 0; i < 5; i++)
    {
        sprintf(ep[i].name, "name_%c", i+65);
        ep[i].age = 21 + i;
        ep[i].jobNumber = 2160 + i;
    }

    void *stk = init_SeqStack();
    push_SeqStack(stk, &ep[0]);
    push_SeqStack(stk, &ep[1]);
    push_SeqStack(stk, &ep[2]);
    push_SeqStack(stk, &ep[3]);
    push_SeqStack(stk, &ep[4]);
    printf("size=%d\n", getSize_seqStack(stk));

    while (getSize_seqStack(stk) > 0)
    {
        EMP *pTop = (EMP *)top_SeqStack(stk);
        printf("name : %s, age=%d, NO=%d\n", pTop->name, pTop->age, pTop->jobNumber);
        pop_SeqStack(stk);
    }

    printf("size=%d\n", getSize_seqStack(stk));

    destroy_seqStack(stk);
    stk = NULL;
}

int main(void)
{
    test();
    return EXIT_SUCCESS;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值