静态栈——基于C语言

最近复习了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;
}

下面是运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值