栈的运行算法

一,顺序栈的静态分配

二,顺序栈的动态分配

#include<stdio.h>
#include<stdlib.h>
#define initsize 5
#define incresize 5typedef struct Sqstack{int *base;int *top;int stacksize;
}Sqstack;void InitStack(Sqstack *s){(*s).base=(int *)malloc(initsize*sizeof(int));if(!(*s).base)exit(0);(*s).top=(*s).base;(*s).stacksize=initsize;
}
void Push(Sqstack *s,int e){if((*s).top-(*s).base >= (*s).stacksize){(*s).base=(int*)realloc((*s).base,((*s).stacksize+incresize)*sizeof(int));if(!(*s).base)exit(0);(*s).top=(*s).base+(*s).stacksize;(*s).stacksize+=incresize;}*((*s).top)=e;(*s).top++;
}
void GetTop(Sqstack s,int *e){if(s.top==s.base) printf("empty!");*e=*(s.top-1);}
int StackLength(Sqstack s){return s.top-s.base;
}
int StackEmpty(Sqstack s){return (s.top==s.base);
}
void Pop(Sqstack *s,int *e){if((*s).top==(*s).base) exit(0);(*s).top--;*e=*((*s).top);
}
void Destroystack(Sqstack *s){if(s!=NULL){free((*s).base);(*s).base=NULL; (*s).top=NULL;(*s).stacksize=0;}
}int main(){Sqstack s;InitStack(&s);int e,p,x;for(int j=0;j<s.stacksize;j++){scanf("%d",&e);Push(&s,e);}GetTop(s,&p);printf("栈顶元素是%d ",p);if(StackEmpty(s)) printf("\n非空!");else ("\n empty!");int length=StackLength(s);printf("\n 栈长为%d",length);Pop(&s,&x);printf("\n 出栈元素是 %d",x);Destroystack(&s);return 0;
}

三,栈链

#include<stdio.h>
#include<stdlib.h>typedef struct stacknode{int data;struct stacknode *next;
}stackNode,*Linkstack;void Initstack(Linkstack *s){*s=(Linkstack)malloc(sizeof(stackNode));(*s)->next=NULL;}
void Push(Linkstack s,int x){Linkstack p=(Linkstack)malloc(sizeof(stackNode));if(!p)exit(0);p->data=x;p->next=s->next;s->next=p;}
void Gettop(Linkstack s,int *e){if(s->next==NULL)exit(0);*e=s->next->data;
}
int Empty(Linkstack s){return (s->next==NULL);
}void Pop(Linkstack s,int *e){if(s->next==NULL){printf("空!");exit(0);}stackNode *p=s->next;e=p->data;s->next=p->next;free(p);
}
void Destroystack(Linkstack s){Linkstack p=s->next,q;while(p!=NULL){q=p->next;free(p);p=q;}free(s);
}
int main(){Linkstack s;Initstack(&s);int n,x;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&x);Push(&s,x);}Gettop(&s,&x);printf("栈顶元素是 %d\n",x);int flag=Empty(s);if(flag==0)printf("空!");else printf("非空!");Pop(&s,&x);printf("出栈元素是 %d",x);Destroystack(&s);return 0;
}

四,进制转换

五,表达式求值

六,括号的匹配问题

七,迷宫问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/132584.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MNIST字符识别(C++)

构建网络 采用官方示例的的lenet网络 训练 相关文件都已编译好&#xff0c;下载后执行命令即可 .\caffe-bin.exe train --solver .\lenet_solver.prototxt 识别 #include <caffe/caffe.hpp>#include <opencv2/core/core.hpp> #include <opencv2/highgui/hi…

echarts画电压线

ChartLibhttp://chartlib.datains.cn/detail?idx0R9f3tOqMExamples - Apache EChartsApache ECharts&#xff0c;一款基于JavaScript的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表。https://echarts.ap…

对验证码的识别爆破

声明&#xff1a;该系列文章首发于公众号&#xff1a;Y1X1n安全&#xff0c;转载请注明出处&#xff01;本公众号所分享内容仅用于每一个爱好者之间的技术讨论及教育目的&#xff0c;所有渗透及工具的使用都需获取授权&#xff0c;禁止用于违法途径&#xff0c;否则需自行承担&…

BN体系理解——类封装复现

from pathlib import Path from typing import Optionalimport torch import torch.nn as nn from torch import Tensorclass BN(nn.Module):def __init__(self,num_features,momentum0.1,eps1e-8):##num_features是通道数"""初始化方法:param num_features:特征…

为Yolov7环境安装Cuba匹配的Pytorch

1. 查看Cuba版本 方法一 nvidia-smi 找到CUDA Version 方法二 Nvidia Control Panel > 系统信息 > 组件 > 2. 安装Cuba匹配版本的PyTorch https://pytorch.org/get-started/locally/这里使用conda安装 conda install pytorch torchvision torchaudio pytorch-cu…

LeetCode416 分割等和子集

题目&#xff1a; 、 分析&#xff1a; 因为分割的子数组&#xff0c;不连续&#xff1b;所以双指针、栈&#xff0c;一般不适用&#xff0c;分析起来很像是DP问题。 思路&#xff1a; https://www.imooc.com/article/300277 代码&#xff1a; //TODO 这题有难度

如何在C++项目中用C#运行程序调试C++ DLL

问题描述 在C#项目中调用C DLL时报错或者运行结果不符&#xff0c;此时需要运行C#项目并在C中加入断点进行调试 项目准备 项目一&#xff1a;C#项目&#xff08;该项目调用C DLL&#xff09;项目二&#xff1a;C项目&#xff08;生成C DLL&#xff09; 这两个项目不需要在同…

【web实现右侧弹窗】JS+CSS如何实现右侧缓慢弹窗动态效果『附完整源码下载』

文章目录 写在前面涉及知识点页面效果1、页面DOM创建1.1创建底层操作dom节点1.2 创建存放弹窗dom节点 2、页面联动功能实现&#xff08;关闭与弹出&#xff09;2.1 点击非右侧区域实现关闭2.2 点击叉叉及关闭按钮实现关闭功能 3、完整源码包下载3.1百度网盘3.2 123云盘3.3邮箱留…

基于若依ruoyi-nbcio支持flowable流程增加自定义业务表单(二)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 之前讲了自定义业务表单&#xff0c;现在讲如何与流程进行关联 1、后端部分 WfCustomFormMapper.xml &…

【SoC FPGA】HPS启动过程

SoC HPS启动流程 Boot ROMPreloaderBoot Loader HPS的启动是一个多阶段的过程&#xff0c;每一个阶段都会完成对应的工作并且将下一个阶段的执行代码引导起来。每个阶段均负责加载下一个阶段。第一个软件阶段是引导 ROM&#xff0c;引导 ROM 代码查找并且执行称为预加载器的第 …

数据挖掘实战(3):如何对比特币走势进行预测?

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

203、RabbitMQ 之 使用 direct 类型的 Exchange 实现 消息路由 (RoutingKey)

目录 ★ 使用direct实现消息路由代码演示这个情况二ConstantUtil 常量工具类ConnectionUtil 连接RabbitMQ的工具类Publisher 消息生产者测试消息生产者 Consumer01 消息消费者01测试消费者结果&#xff1a; Consumer02 消息消费者02测试消费者结果&#xff1a; 完整代码&#x…