数组实现栈(附带源码)

这篇具有很好参考价值的文章主要介绍了数组实现栈(附带源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

头文件:Stack.h

Stack.c文件:文章来源地址https://www.toymoban.com/news/detail-816590.html


很简单,直接上源码

头文件:Stack.h

#pragma once
#include<stdio.h>
#include<stdlib.h>;
#include<assert.h>;
// 支持动态增长的栈
typedef int STDataType;
typedef struct Stack
{
	STDataType *a;
	int top;		// 栈顶
	int capacity;  // 容量 
}Stack;

// 初始化栈 
void StackInit(Stack* ps);
// 入栈 
void StackPush(Stack* ps, STDataType data);
// 出栈 
void StackPop(Stack* ps);
// 获取栈顶元素 
STDataType StackTop(Stack* ps);
// 获取栈中有效元素个数 
int StackSize(Stack* ps);
// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 
int StackEmpty(Stack* ps);
// 销毁栈 
void StackDestroy(Stack* ps);

Stack.c文件:

#include"Stack.h"
// 初始化栈 
void StackInit(Stack* ps)
{
	STDataType* temp  = (STDataType*)malloc(sizeof(STDataType) * 4);
	if (temp == NULL)
	{
		perror("malloc fail \n");
		exit(-1);
	}
	ps->a =  temp;
	ps->capacity = 4;
	ps->top = -1;
}
// 入栈 
void StackPush(Stack* ps, STDataType data)
{
	assert(ps);
	if (ps->capacity == ps->top+1)
	{
		STDataType* temp = (STDataType*)realloc(ps->a,sizeof(STDataType) * ps->capacity *2);
		if (temp == NULL)
		{
			perror("realloc fail \n");
			exit(-1);
		}
		ps->a = temp;
		ps->capacity *= 2;
	}
		ps->a[ps->top + 1] = data;
		ps->top++;
}
// 出栈 
void StackPop(Stack* ps)
{
	assert(ps);
	if(ps->top == -1)
	{
		return ;
	}
	ps->top--;
}
// 获取栈顶元素 
STDataType StackTop(Stack* ps)
{
	assert(ps);
	if (ps->top == -1)
	{
		return -1;
	}
	return ps->a[ps->top];
}
// 获取栈中有效元素个数 
int StackSize(Stack* ps)
{
	assert(ps);
	if (ps->top == -1)
	{
		return -1;
	}
	return ps->top + 1;
}
// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 
int StackEmpty(Stack* ps)
{
	assert(ps);
	if (ps->top == -1)
		return 1;
	else
		return 0;
}
// 销毁栈 
void StackDestroy(Stack* ps)
{
	free(ps->a);
	ps->a = NULL;
	ps->capacity = 0;
	ps->top = 0;
	printf("destory success!\n");
}

到了这里,关于数组实现栈(附带源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入理解Java线程池ThreadPoolExcutor实现原理、数据结构和算法(源码解析)

    什么是线程池?         线程池主要是为了解决执行新任务执行时,应用程序为减少为任务创建一个新线程和任务执行完毕时销毁线程所带来的开销。通过线程池,可以在项目初始化时就创建一个线程集合,然后在需要执行新任务时重用这些线程而不是每次都新建一个线

    2024年02月07日
    浏览(45)
  • 力扣数组类题目--41缺失的第一个正数

    41 缺失的第一个正数 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案 。 示例 1: 输入:nums = [1,2,0] 输出:3 示例 2: 输入:nums = [3,4,-1,1] 输出:2 示例 3: 输入:nums = [7,8,9,11,12

    2024年02月11日
    浏览(36)
  • Java连接MySQL实现增删改查--学生管理系统(附带注释源码!!!)

    项目源代码分享 Java的安装 java.jdk 3.8 安装Eclipse MySQL的安装 Navicat (测试使用的是 11. 1.13) 先了解整体流程再学具体代码,附件中代码都有注释 数据库的连接 数据准备 提前导入jar包 在工程下先新建一个 lib文件夹 把jar包复制进去然后右键构建路径 ,点击添加至构建路径,如

    2024年01月24日
    浏览(43)
  • 华为OD机试 - 题目解析和算法源码(Java & JS & Python & C & C++)

    哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 某个开源社区希望将最近热度比较高的开源项目出一个榜单,推荐给社区里面的开发者。 对于每个开源项目,开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请

    2024年03月27日
    浏览(43)
  • Java 数据结构篇-用链表、数组实现队列(数组实现:循环队列)

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍   文章目录         1.0 队列的说明         1.1 队列的几种常用操作         2.0 使用链表实现队列说明         2.1 链表实现队列         2.2 链表实现队列 - 入栈操作         2.3 链表实现队

    2024年02月05日
    浏览(38)
  • java数据结构与算法刷题-----LeetCode209. 长度最小的子数组

    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完): https://blog.csdn.net/grd_java/article/details/123063846 解题思路 代码:时间复杂度O(n).空间复杂度O(1)

    2024年01月21日
    浏览(48)
  • C++力扣题目1005--K次取反后最大化的数组和 134--加油站 135--分发糖果

    力扣题目链接(opens new window) 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。) 以这种方式修改数组后,返回数组可能的最大和。 示例 1: 输入:A = [4,2,3],

    2024年01月21日
    浏览(44)
  • 数据结构与算法—一维数组、二维数组、矩阵、顺序串、链接串的C++代码实现

    1、一维数组:ArrayOneD.h 数组这种数据结构可以看作线性表的推广。数组一般采用顺序存储的方法表示。 这是一个模板类 ArrayOneD 的实现,用于表示一维数组。它包括了 构造函数、拷贝构造函数、析构函数、重载下标运算符、重载赋值运算符、求数组长度、重新设置数组长度

    2024年02月07日
    浏览(60)
  • 【数据结构和算法】使用数组的结构实现链表(单向或双向)

    上文我们通过结构体的结构实现了队列 、以及循环队列的实现,我们或许在其他老师的教学中,只学到了用结构体的形式来实现链表、队列、栈等数据结构,本文我想告诉你的是,我们 可以使用数组的结构实现链表、单调栈、单调队列 目录 前言 一、用数组结构的好处 1.数

    2024年01月20日
    浏览(70)
  • 数据结构——用Java实现数组

    数据结构是一门基础的学科,是研究数据如何在计算机中进行组织和存储,使得我们可以高效的获取数据和修改数据的。 1.线性结构:数组、队列、栈、链表、哈希表… 2.树形结构:二叉树、二分搜索树、AVL树,红黑树、堆、Trie、线段树、并查集… 3.图结构:邻接矩阵、邻接

    2024年01月18日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包