顺序栈之共享栈实现——C语言

news2024/9/22 9:41:19

参考书:数据结构教程 第5版 李葆春 P83共享栈

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

#define MaxSize 10

/*共享栈*/
typedef struct 
{
    char data[MaxSize];
    int top1,top2,len;
}DStack;

/*初始化*/
void InitStack(DStack *s){
    s->top1=-1,s->top2=MaxSize,s->len=MaxSize;
    s=(DStack *)malloc(sizeof(DStack));
    printf("%s\n",s->data);
}

/*销栈*/
void DestroyStack(DStack *s){
    free(s);
}

/*判断栈是否为空*/
int StackEmpty(DStack *s, int i){
    /*对栈1操作*/
    if (i==1)
    {
        return (s->top1==-1);
    }
    if (i==2)
    {
        return (s->top2==MaxSize);
    }
    
}

/*进栈*/
void Push(DStack *s, int e, int i){
    if (i==1&&s->len>0)
    {
        s->top1++;
        s->data[s->top1]=e;
        s->len--;
    }
    if (i==2&&s->len>0)
    {
        s->top2--;
        s->data[s->top2]=e;
        s->len--;
    }
}

/*出栈*/
void Pop(DStack *s, int *e, int i){
    if (i==1)
    {
        *e=s->data[s->top1];
        s->top1--;
    }
    if (i==2)
    {
        *e=s->data[s->top2];
        s->top2++;
    }
}

/*取栈顶元素*/
void GetTop(DStack *s,int *e, int i){
    if (i==1)
    {
        *e=s->data[s->top1];
    }
    if (i==2)
    {
        *e=s->data[s->top2];
    }
}

/*实例:输入两个字符串*/
void Input(char str1[], char str2[]){
    char e;
    DStack st;
    InitStack(&st);
    /*进栈*/
    for (int j = 0; str1[j]!='\0'; j++)
    {
        Push(&st, str1[j], 1);
    }
    for (int k = 0; str2[k]!='\0'; k++)
    {
        Push(&st, str2[k], 2);
    }
    /*判断栈空*/
    if(StackEmpty(&st,1)){
        printf("栈1空\n");
    }
    if (StackEmpty(&st,2))
    {
        printf("栈2空\n");
    }
    /*取栈顶*/
    GetTop(&st,&e,1);
    printf("栈1顶:%c\n",e);
    GetTop(&st,&e,2);
    printf("栈2顶:%c\n",e);
    /*出栈*/
    while (st.top1)
    {
        Pop(&st,&e,1);
        printf("%c",e);
    }
    printf("\n");
    while (st.top2<MaxSize)
    {
        Pop(&st,&e,2);
        printf("%c",e);
    }
    printf("\n");
    /*销栈*/
    DestroyStack(&st);
    // printf("%d\n",st.top1);
    // printf("%d\n",st.top2);
    // printf("%s",st.data);    
}

int main(){
    char str1[10]={"qwertyu"};
    char str2[10]={"zxcvb"};
    Input(str1, str2);
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[蓝桥杯学习] 树状数组的二分

要解决这个问题&#xff0c;插入和删除可以用STL实现&#xff0c;2操作如果用树状数组实现的话&#xff0c;将数的值作为树状数组的下标&#xff0c;即值域。 树状数组有两种操作&#xff0c;一个是更新某点的值&#xff0c;另一个是求区间和。 mid (lr)/2 &#xff0c;求和 …

CTF-PWN-栈溢出-中级ROP-【栈迁移】

文章目录 栈迁移具体流程 VNCTF 2023 traveler libc-2.27检查源码main函数![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/386c35c30f854434ae43667b9473c58a.png)全局变量地址局部变量地址 PIE保护开启PIE关闭PIE 思路exp 栈迁移参考 栈迁移参考 栈迁移 顾名思义…

数模学习day10-聚类模型

说明&#xff0c;本文部分图片和内容源于数学建模交流公众号 目录 K-means聚类算法 K-means聚类的算法流程&#xff1a; 图解 算法流程图 评价 K-means算法 基本原则 算法过程 Spss软件操作 K-means算法的疑惑 系统&#xff08;层次&#xff09;聚类 算法流程 Sp…

LVGL 主题

LVGL 主题 修改样式的一点个人心得 lvgl的样式众多&#xff0c;本人是记不住的&#xff0c;用的时候可以快速查找即可 查看官方例子 查看官方例子可以快速了解组件的基础样式 使用官方的 SquareLineStudio 软件&#xff0c;配置出想要的效果&#xff0c;再生成参考代码 Squ…

linux系统基础知识-基础IO

IO 概念引入位图的概念IO的系统调用函数openwriteread()close简单使用样例&#xff1a; 文件描述符fd默认文件流stdin/stdout/stderr文件描述符的分配规则 重定向的概念输出重定向输入重定向追加重定向dup2()系统调用总结 文件缓冲区深入理解缓冲区的概念输出缓冲区部分代码解释…

基于ssm的儿童影楼拍摄管理系统的设计与实现+vue论文

基于SSM的儿童影楼拍摄管理系统的设计与实现 摘 要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于商品信息的管理和控制&#xff0c;采用人工登记的方式保存相关数据&…

实时云渲染是什么?它的应用方向有哪些?

实时云渲染有三个关键词&#xff0c;"实时"、"云"和"渲染"&#xff0c;它们分别表示&#xff1a;同步、云服务器计算和图像生成过程&#xff0c;简单来说就是使用第三方平台快速完成渲染任务&#xff0c;它有两个实用方向&#xff1a; 一、实时渲…

4.4 媒资管理模块 - 分布式任务处理介绍、视频处理技术方案

媒资管理模块 - 视频处理 文章目录 媒资管理模块 - 视频处理一、视频转码1.1 视频转码介绍1.2 FFmpeg 基本使用1.2.1 下载安装配置1.2.2 转码测试 1.3 工具类1.3.1 VideoUtil1.3.2 Mp4VideoUtil1.3.3 测试工具类 二、分布式任务处理2.1 分布式任务调度2.2 XXL-JOB 配置执行器 中…

Master01节点免密钥登录其他节点

1、执行命令 ssh-keygen -t rsa&#xff0c;一直敲回车 2、for i in k8s-master01 k8s-node01 k8s-node02;do ssh-copy-id -i .ssh/id_rsa.pub $i;done 输入yes和对应节点密码

PostGIS教程学习十九:基于索引的聚簇

PostGIS教程学习十九&#xff1a;基于索引的聚簇 数据库只能以从磁盘获取信息的速度检索信息。小型数据库将完全位于于RAM缓存&#xff08;内存&#xff09;&#xff0c;并摆脱物理磁盘访问速度慢的限制。但是对于大型数据库&#xff0c;对物理磁盘的访问将限制数据库的信息检…

在VS Code中安装Copilot与安装其他扩展的方法一样,只需简单几步

GitHub Copilot是由OpenAI和GitHub开发的人工智能工具。它的目的是通过自动完成代码来帮助开发人员使用集成开发环境&#xff08;IDE&#xff09;&#xff0c;如Visual Studio Code。它目前仅作为技术预览版提供&#xff0c;因此只有在候补名单上被认可的用户才能访问它。对于用…

纯血鸿蒙「扩圈」100天,酝酿已久的突围

坦白讲&#xff0c;去年参加华为开发者大会看到HarmonyOS NEXT&#xff08;仅运行鸿蒙原生应用&#xff0c;所以也称作「纯血鸿蒙」&#xff09;的时候&#xff0c;小雷也没料想到鸿蒙原生应用生态的发展速度会如此之快。 9月25日&#xff0c;华为正式对外宣布启动HarmonyOS NE…

PTA✨C语言 就不告诉你

7-7 就不告诉你 分数 15 全屏浏览题目 切换布局 作者 CHEN, Yue 单位 浙江大学 做作业的时候&#xff0c;邻座的小盆友问你&#xff1a;“五乘以七等于多少&#xff1f;”你应该不失礼貌地围笑着告诉他&#xff1a;“五十三。”本题就要求你&#xff0c;对任何一对给定的正…

2024年美国大学生数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

[前车之鉴] SpringBoot原生使用Hikari数据连接池升级到动态多数据源的深坑解决方案 RocketMQ吞掉异常问题排查

文章目录 背景说明蒙蔽双眼口说无凭修补引发的新问题解决配置问题 本地监控佐证万法归元 背景说明 当前业务场景我们使用原生SpringBoot整合Hikari数据源连接池提供服务&#xff0c;但是近期业务迭代需要使用动态多数据源&#xff0c;很自然想到dynamic-source&#xff0c;结果…

Python教程37:使用turtle画一个戴帽子的皮卡丘

---------------turtle源码集合--------------- Python教程36&#xff1a;海龟画图turtle写春联 Python源码35&#xff1a;海龟画图turtle画中国结 Python源码31&#xff1a;海龟画图turtle画七道彩虹 Python源码30&#xff1a;海龟画图turtle画紫色的小熊 Python源码29&a…

linux 系统安全及应用

一、账号安全基本措施 1.系统账号清理 1.将用户设置为无法登录 /sbin/nologin shell——/sbin/nologin却比较特殊&#xff0c;所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已&#xff0c;并不是说这个账号就无法使用系统资源。举例来说&#xff0c;…

JAVA基础学习笔记-day15-File类与IO流

JAVA基础学习笔记-day15-File类与IO流 1. java.io.File类的使用1.1 概述1.2 构造器1.3 常用方法1、获取文件和目录基本信息2、列出目录的下一级3、File类的重命名功能4、判断功能的方法5、创建、删除功能 2. IO流原理及流的分类2.1 Java IO原理2.2 流的分类2.3 流的API 3. 节点…

SNP浅谈SAP系统增强及二次开发

SAP 系统增强和二次开发是指在 SAP 系统的基础上&#xff0c;对现有功能进行扩展和增强&#xff0c;以满足特定业务需求。增强和二次开发可以通过不同的方法实现&#xff0c;包括&#xff1a; ■ 数据集成&#xff1a;通过创建数据接口&#xff0c;实现 SAP 系统与其他系统之间…

视频智能分析/边缘计算AI智能分析网关V4区域入侵检测算法如何配置?

边缘计算AI智能分析网关&#xff08;V4版&#xff09;部署了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;并上报识别结果&#xff0c;并能进行语音告警播放。算法配置后&#xff0c;即可对监控视频流进行实时检测&#xf…