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