Stack接口
- 栈结构类型定义
#define STACK_MAX_SIZE (1024)
typedef struct __stack
{
void *pData[STACK_MAX_SIZE];
int size;
}ST_STACK;
typedef void* PST_STACK;
typedef struct __lstack
{
struct __lstack *pstNext;
int data;
}LST_STACK;
typedef struct __listStack
{
LST_STACK header;
int size;
}LIST_ST_STACT;
方式一
- 创建和初始化栈
PST_STACK init_stack(void)
{
ST_STACK *pstStack = malloc(sizeof(ST_STACK));
if(NULL == pstStack)
{
return NULL;
}
for(int i = 0; i < STACK_MAX_SIZE; i++)
{
pstStack->pData[i] = NULL;
}
pstStack->size = 0;
return pstStack;
}
- 入栈
/*入栈*/
int push_stack(PST_STACK pstStack, void *pData)
{
ST_STACK *pStack = NULL;
if(NULL == pstStack || NULL == pData )
{
return -1;
}
pStack = (ST_STACK *)pstStack;
if(pStack->size > STACK_MAX_SIZE)
{
return 0;
}
pStack->pData[pStack->size] = pData;
pStack->size++;
return 1;
}
- 出栈
/*出栈*/
int pop_stack(PST_STACK pstStack)
{
ST_STACK *pStack = NULL;
if(NULL == pstStack)
{
return -1;
}
pStack = (ST_STACK *)pstStack;
if(pStack->size == 0)
{
return 0;
}
pStack->pData[pStack->size - 1] = NULL;
pStack->size--;
return 1;
}
- 获得栈顶元素
void *get_top_stack(PST_STACK pstStack)
{
ST_STACK *pStack = NULL;
if(NULL == pstStack)
{
return NULL;
}
pStack = (ST_STACK *)pstStack;
return pStack->pData[pStack->size - 1];
}
- 获取栈大小
int get_stack_size(PST_STACK pstStack)
{
ST_STACK *pStack = NULL;
if(NULL == pstStack)
{
return -1;
}
pStack = (ST_STACK *)pstStack;
return pStack->size;
}
- 遍历打印
void print_stack(PST_STACK pstStack)
{
ST_STACK *pStack = NULL;
int size = 0;
if(NULL == pstStack)
{
return;
}
pStack = (ST_STACK *)pstStack;
size = pStack->size;
while(size > 0)
{
struct Test *stOut = (struct Test *)pStack->pData[size - 1];
printf("stack %d: %s %d\n", size, stOut->data, stOut->length);
size--;
}
}
方式二
- List 方式堆栈创建及初始化
PST_STACK init_list_stack(void)
{
LIST_ST_STACT *pListStStack = malloc(sizeof(LIST_ST_STACT));
if(NULL == pListStStack)
{
return NULL;
}
pListStStack->header.pstNext = NULL;
pListStStack->size = 0;
return pListStStack;
}
- List stack 入栈
int push_list_stack(PST_STACK pStack, void *pData)
{
LIST_ST_STACT *pListStack = NULL;
LST_STACK *pstStack = NULL;
if(NULL == pStack || NULL == pData)
{
return -1;
}
pListStack = (LIST_ST_STACT *)pStack;
pstStack = (LST_STACK *)pData;
pstStack->pstNext = pListStack->header.pstNext;
pListStack->header.pstNext = pstStack;
pListStack->size++;
return 1;
}
- List stack 出栈
int pop_list_stack(PST_STACK pStack)
{
LIST_ST_STACT *pListStack = NULL;
LST_STACK *pstStack = NULL;
if(NULL == pStack)
{
return -1;
}
pListStack = (LIST_ST_STACT *)pStack;
if(pListStack->size == 0)
{
return 0;
}
pstStack = pListStack->header.pstNext;
pListStack->header.pstNext = pstStack->pstNext;
pListStack->size--;
return -1;
}
- List stack 获取栈顶元素
void *get_list_stack_top(PST_STACK pStack)
{
LIST_ST_STACT *pListStack = NULL;
if(NULL == pStack)
{
return NULL;
}
pListStack = (LIST_ST_STACT *)pStack;
if(pListStack->size == 0)
{
return NULL;
}
return pListStack->header.pstNext;
}
- List stack 获取堆栈大小
int get_list_stack_size(PST_STACK pStack)
{
LIST_ST_STACT *pListStack = NULL;
if(NULL == pStack)
{
return -1;
}
pListStack = (LIST_ST_STACT *)pStack;
return pListStack->size;
}
- List stack 释放
void free_list_stack(PST_STACK pStack)
{
LIST_ST_STACT *pListStack = NULL;
if(NULL == pStack)
{
return;
}
pListStack = (LIST_ST_STACT *)pStack;
pListStack->header.pstNext = NULL;
pListStack->size = 0;
free(pStack);
pStack = NULL;
}
- 打印List stack
void print_list_stack(PST_STACK pStack)
{
LIST_ST_STACT *pListStack = NULL;
LST_STACK *pStackNode = NULL;
int size = 0;
if(NULL == pStack)
{
printf("list stack is null\n");
return;
}
pListStack = (LIST_ST_STACT *)pStack;
pStackNode = pListStack->header.pstNext;
size = pListStack->size;
while(size != 0)
{
printf("List stack node: %d\n", pStackNode->data);
pStackNode = pStackNode->pstNext;
size--;
}
}