实现静态栈使用数组实现

静态栈

说明: 为什么要使用数组来定义一个栈,主要是为了 leetcode 上面的题目减少内存的。链式栈也可以用,具体思路使用一个预先设定好的数组,栈底就是:a[0],剩下的操作只需要维护一个 index 就可以实现栈。

注意事项:如果你使用的是 mac Xcode 10 测试代码,选择 C 语言。则需要添加一个头文件 #include<stdbool.h>。是使用 C 语言开发的。

栈的头文件: StaticStack.h

//#pragma once

#pragma once

// 数组实现栈

// 数据元素类型
typedef int elemType;

// 栈的最大元素是
#define MAX_COUNT 10

typedef struct staticStack
{
	// 栈的数据存储
	elemType array[MAX_COUNT];
	// 栈顶指针
	int top;
	// 栈底指针
	int base;
}StaticStack;


// 初始化一个栈
bool initStaticStack(StaticStack** statck);

// 压入栈里面
bool pushStaticStack(StaticStack* statck, elemType e);

// 出栈
bool popStaticStack(StaticStack* statck, elemType* e);

// 获取栈顶元素
bool getStaticStackTop(StaticStack* statck, elemType* e);

// 获取栈的长度
int getStaticStackLength(StaticStack* statck);

// 判断栈是否为空
bool isEmptyStaticStack(StaticStack* statck);

// 显示一个栈
void dipPlayStaticStack(StaticStack* statck);

 

栈的源文件: StaticStack.cpp

#include "StaticStack.h"

#include<stdio.h>
#include<stdlib.h>


// 初始化一个栈
bool initStaticStack(StaticStack** statck)
{
	*(statck) = (StaticStack*)malloc(sizeof(StaticStack));
	if (!*statck)
	{
		printf("内存不够!\n");

		return false;
	}
	(*(statck))->top = -1;
	(*(statck))->base = 0;
	return true;
}


// 压入栈里面
bool pushStaticStack(StaticStack* statck, elemType e)
{
	// 这个时候栈不能再添加元素了
	if ((statck->top +1) == (MAX_COUNT))
	{
		printf("元素太多了容纳不下了!\n");
		return false;
	}
	else
	{
		statck->top = statck->top + 1;
		statck->array[statck->top] = e;
	}

	return true;
}

// 出栈
bool popStaticStack(StaticStack* statck, elemType* e)
{

	if (isEmptyStaticStack(statck) == true)
	{
		printf("栈是空的了!\n");
		return false;
	}

	*e = statck->array[statck->top];
	statck->top = statck->top - 1;

	return true;
}

// 获取栈顶元素
bool getStaticStackTop(StaticStack* statck, elemType* e)
{
	if (isEmptyStaticStack(statck) == true)
	{
		*e = -1;
		return false;
	}
	else
	{
		*e = statck->array[statck->top];
		return true;
	}
}

// 获取栈的长度
int getStaticStackLength(StaticStack* statck)
{
	return (statck->base + 2);
}


// 判断栈是否为空
bool isEmptyStaticStack(StaticStack* statck)
{
	return (statck->top == -1);
}

// 显示一个栈
void dipPlayStaticStack(StaticStack* statck)
{
	printf("当前栈的元素有: \n");

	if (isEmptyStaticStack(statck) == true)
	{
		printf("栈是空的了!\n");
	}
	else
	{
		// 打印栈
		for (int i = statck->top; i >= 0 ; --i)
		{
			printf("%d ", statck->array[i]);
		}

		printf("\n");
	}
}

测试文件:

/*
* 测试 文件
*/
#include<stdio.h>
// #include<Windows.h>

#include"StaticStack.h"

int main(int  argc, char*  argv[])
{
	printf("Hello World! Stack\n");

	StaticStack* s;
	initStaticStack(&s);

	pushStaticStack(s, 100);
	pushStaticStack(s, 101);
	pushStaticStack(s, 102);

	dipPlayStaticStack(s);

	

	int e = 0;
	popStaticStack(s, &e);
	printf("出栈的元素是 %d\n", e);
	getStaticStackTop(s, &e);
	printf("栈顶的元素是 %d\n", e);
	printf("栈的长度是: %d\n",getStaticStackLength(s));
	dipPlayStaticStack(s);

	// system("pause");
	return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值