最近复习了C语言的相关知识,实现了静态栈。
下面是Main.c文件:
#include "StaticStack.h"
#include <stdio.h>
int main()
{
StaticStack* stack = StaticStackCreate();
if(stack != NULL)
{
int i, len = -1, data = -1;
for(i = 0; i < StaticStackCapacity(stack); i++)
{
StaticStackPush(stack, i);
}
printf("插入状态:%d\n", StaticStackPush(stack, 100));
len = StaticStackLength(stack);
printf("len = %d\n\n", len);
for(i = 0; i < len / 2; i++)
{
StaticStackPop(stack, NULL);
}
len = StaticStackLength(stack);
printf("len = %d\n\n", len);
printf("打印栈中数据:\n");
for(i = 0; i < len; i++)
{
StaticStackPop(stack, &data);
printf("data[%02d] = %-2d\n", i, data);
}
stack = StaticStackDestroy(stack);
}
return 0;
}
下面是StaticStack.h文件:
#ifndef __STATICSTACK_H__
#define __STATICSTACK_H__
typedef int DataType;
#define deBug() printf("File = %s\nLine = %d\n", __FILE__, __LINE__)
#include <stdio.h>
#include <stdlib.h>
#ifndef __cplusplus
typedef int Bool;
#define true 1
#define false 0
#else
typedef bool Bool;
#endif
#define MALLOC(type, size) (type*)malloc(sizeof(type) *size)
#define FREE(p) (free(p), p = NULL)
#define STRUCT(type) typedef struct __struct##type type;\
struct __struct##type
#define __STATICSTACK_MAX 100
STRUCT(StaticStack)
{
DataType data[__STATICSTACK_MAX];
int len;
int top;
};
StaticStack* StaticStackCreate(void);
StaticStack* StaticStackDestroy(StaticStack *stack);
int StaticStacktLength(StaticStack *stack);
int StaticStackCapacity(StaticStack *stack);
Bool StaticStackPush(StaticStack *stack, DataType data);
Bool StaticStackPop(StaticStack *stack, DataType *data);
Bool StaticStackTop(StaticStack *stack, DataType *data);
#endif
下面是StaticStack.c文件:
#include "StaticStack.h"
StaticStack* StaticStackCreate(void) //O(1)
{
StaticStack *ret = MALLOC(StaticStack, 1);
if(ret != NULL)
{
ret->top = -1;
ret->len = 0;
}
return ret;
}
StaticStack* StaticStackDestroy(StaticStack *stack) //O(1)
{
return FREE(stack);
}
int StaticStackLength(StaticStack *stack) //O(1)
{
return (stack != NULL) ? stack->len : -1;
}
int StaticStackCapacity(StaticStack *stack) //O(1)
{
return (stack != NULL) ? __STATICSTACK_MAX : -1;
}
Bool StaticStackPush(StaticStack *stack, DataType data) //O(1)
{
Bool ret = (stack != NULL) && (stack->len < __STATICSTACK_MAX);
if(ret)
{
stack->data[stack->len] = data;
stack->top++;
stack->len++;
}
return ret;
}
Bool StaticStackPop(StaticStack *stack, DataType *data) //O(1)
{
Bool ret = (stack != NULL) && (stack->len > 0);
if(ret)
{
if(data != NULL) *data = stack->data[stack->top];
stack->top--;
stack->len--;
}
return ret;
}
Bool StaticStackTop(StaticStack *stack, DataType *data) //(1)
{
Bool ret = (stack != NULL) && (stack->len > 0);
if(ret)
{
if(data != NULL) *data = stack->data[stack->top];
}
return ret;
}
下面是运行结果: