当前位置: 首页 > article >正文

栈算法【基于顺序表】

(1)代码如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* 栈的操作实现 */

typedef struct
{
	int* data;       //堆栈的数据存储区
	int top, size;   //堆栈的栈顶指针和堆栈的长度
}g_tStack;

//栈的初始化
void StackInit(g_tStack * pstack, int len)
{
	if (NULL == pstack) return;
	pstack->data = (int*)malloc(sizeof(int) * len);
	pstack->size = len;
	pstack->top = -1;
	return;
}

//判断栈是否为空
bool StackEmpty(g_tStack* pstack)
{   //栈顶指针等于栈元素数量-1的时候,栈满
	if ((NULL == pstack)||(-1 >= pstack->top)) return true;
	return false;
}

//判断栈是否满
bool StackFull(g_tStack* pstack)
{   //栈顶指针等于-1的时候,栈空
	if ((NULL == pstack) || (pstack->top >= pstack->size - 1)) return true;
	return false;
}

//向栈中压入数据
bool StackPush(g_tStack* pstack, int data)
{
	if ((NULL == pstack) || (StackFull(pstack))) return false;
	pstack->top++;                        //栈顶指针上移
	pstack->data[pstack->top] = data;	  //向栈顶存入数据
	return true;
}

//从栈中取出数据
bool StackPop(g_tStack* pstack, int* data)
{
	if ((NULL == pstack) || (StackEmpty(pstack))) return false;
	*data = pstack->data[pstack->top];    //从栈中取出数据
	pstack->top--;                        //栈顶指针下移
	return true;
}

//栈空间的清理


int main()
{
	bool ret;
	int data;
	g_tStack stack;        //创建栈对象结构体
	StackInit(&stack, 5);  //初始化深度为5的栈
	for (int i = 0; i < 6; i++)    //向栈中压入6个数据,最后一个会报错
	{
		data = rand() % 100;
		ret = StackPush(&stack, data);
		if (ret)
			printf("push: %d\r\n", data);
		else
			printf("error\r\n");
	}
	for (int i = 0; i < 6; i++)   //向栈中取出6个数据,最后一个会报错
	{
		ret = StackPop(&stack, &data);
		if (ret)
			printf("push: %d\r\n", data);
		else
			printf("error\r\n");
	}
	return 0;
}

(2)运行结果如下所示:


http://www.kler.cn/news/284927.html

相关文章:

  • centos 系统yum 安装 mariadb
  • UML类图中的组合关系
  • Vue3 + Axios双Token刷新解决方案
  • MySQL——多表操作(四)子查询(1)带 IN 关键字的子查询
  • Xilinx高速接口之GTP
  • CSS 预处理器
  • 10、ollama启动LLama_Factory微调大模型(llama.cpp)
  • opencv之形态学
  • 喜羊羊做Python真题
  • 基于Android+SQLite数据库开发Java考试App
  • 深度学习100问15:什么是交叉熵误差
  • 【Linux】Linux Bash Shell 教程
  • 工程师们都爱看的Docker容器技术,一看就会!保姆级教程(上)
  • Nginx负载均衡请求队列配置:优化流量管理
  • MySQL:简述事务的SQL操作
  • K8S Job
  • CSS优化实践
  • 计算机毕业设计选题推荐-二手物品回收系统-Java/Python项目实战
  • Nuxt3入门:资源文件(第2节)
  • LeetCode第65题 有效数字 结合设计模式:状态模式
  • Linux下C++编程使用动态链接库
  • Openldap可视化工具PhpLdapAdmin服务配置
  • TMPDIR在pip|pip3 install时的作用以及tmp只有noexec权限的解决方法
  • 问题记录之Qt Creator下qDebug中文乱码
  • SparkSQL缓存的用法
  • IM社交-前言
  • 负载均衡的分类有哪些?
  • 路由策略工具
  • 51单片机——模块化编程
  • Kafka分布式集群部署实战:跨越理论,直击生产环境部署难题与解决方案,性能调优、监控与管理策略大揭秘,轻松上手分布式消息中间件