栈结构实现

栈结构的实现:

1>初始化创建栈结构

2>释放销毁栈结构

3>顺序答应栈元素

4>清空栈

5>判断栈是否为空

6>Push 入栈

7>Pop出栈

8>Top返回栈顶元素

注:数组实现代码如下

#include <iostream>
#include <memory>

#define MaxStackNum 5
#define INCREMENT   3
typedef int DataType;

typedef struct Stack
{
	DataType* top;   // 栈顶指针
	DataType* base;  // 栈底指针
	int cap;         // 当前栈容量
	int num;         // 当前栈大小
};

// 初始化创建栈结构
int InitStack(Stack& stack)
{
	stack.base = (DataType*) malloc(sizeof(DataType) * MaxStackNum);
	if (NULL == stack.base)
	{
		std::cout << "Stack init failed " << std::endl;
		exit(0);
	}

	stack.top = stack.base;
	stack.cap = MaxStackNum;
	stack.num = -1;
	return 1;
}

// 销毁栈结构
void DestoryStack(Stack& stack)
{
	if (NULL != stack.base)
	{
		  free(stack.base);
		  std::cout << "Destory stack succeed ~" << std::endl;
	}
	
}

// 顺序打印栈元素
void PrintStack(Stack& stack)
{
	std::cout << "Stack elems [";
	DataType* ptr = stack.base;
	while( ptr != stack.top)
	{
		std::cout << " " << *ptr;
		ptr++;
	}

	std::cout << " ]" << std::endl;
}

// 清空栈
void ClearStack(Stack& stack)
{
	stack.top = stack.base;
	stack.num = -1;
}

// 判断栈是否为空
int Empty(Stack& stack)
{
	if (stack.base == stack.top)
		return 1;
	return 0;
}

// push 元素 入栈操作
void Push(Stack& stack, DataType data)
{
	if (stack.top - stack.base + 1 >= stack.cap)
	{
		// std::cout << "Need Memory" << std::endl;

		DataType* tmp = stack.base;
		stack.base = (DataType*) realloc(stack.base, sizeof(DataType) * (stack.cap + INCREMENT));
		if (NULL == stack.base)
		{
			std::cout << "Push realloc failed and exit" << std::endl;
			free(tmp);
			exit(0);
		}
		stack.cap += INCREMENT;
		stack.top = stack.base+stack.num + 1;
	}

	*stack.top = data;
	++stack.top;
	++stack.num;
}

// pop 出栈操作
DataType Pop(Stack& stack)
{
	if (Empty(stack))
	{
		std::cout << "Pop failed and stack empty" << std::endl;
		exit(0);
	}

	--stack.top;
	--stack.num;

	return *(stack.top);
}

// 返回栈顶元素
DataType Top(Stack& stack)
{
	if (Empty(stack))
	{
		std::cout << "Top failed and stack empty" << std::endl;
		exit(0);
	}

	return *(stack.top - 1);
}


#include "stack.h"
int main()
{

	Stack stack;
	if (InitStack(stack) == 1)
	{
		std::cout << "Init and create stack succeed~" << std::endl;
	}
	PrintStack(stack);

	std::cout << Empty(stack) << std::endl;
	ClearStack(stack);
	PrintStack(stack);

	for (int i = 1; i <= 10; i++)
		Push(stack, i);
	PrintStack(stack);
	std::cout << Top(stack) << std::endl;
	PrintStack(stack);

	for(int i = 0; i < 15; i++)
	{
		Pop(stack);
		std::cout << Top(stack) << std::endl;
		PrintStack(stack);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值