利用两个栈s1,s2模拟一个队列时,如何用栈的运算来实现该队列的运算?写出模拟队列插入和删除的函数。一个栈s1用于插入元素,另一个栈s2用于删除元素

news2025/2/23 1:40:16

利用两个栈s1,s2模拟一个队列时,如何用栈的运算来实现该队列的运算?写出模拟队列插入和删除的函数。一个栈s1用于插入元素,另一个栈s2用于删除元素。

前置知识点(栈定义,及出栈入栈函数)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdbool.h>
#define MaxSize 5
typedef struct {
	int data[MaxSize];//栈中元素
	int top;//栈顶指针
}SqStack;

void InitStack(SqStack* S) {//栈初始化
	(*S).top = -1;
}

bool StackEmpty(SqStack* S) {//判空
	if ((*S).top == -1) {//栈中无元素
		return true;
	}
	else {
		return false;
	}
}


bool Pop(SqStack* S, int* x) {//出栈
	if (S->top == -1) {//栈中无元素
		return false;
	}
	*x = S->data[S->top];
	S->top--;
	return true;
}

bool Push(SqStack* S, int x) {//入栈
	if (S->top == MaxSize - 1) {
		return false;
	}
	S->top++;
	S->data[S->top] = x;
	return true;
}

模拟入队:

//模拟入队
int EnQueue(SqStack* s1, SqStack* s2,int x) {
	int tmp = 0;//用于后面出栈带出出栈元素
	if (s1->top==MaxSize-1) {//s1满了
		if (!StackEmpty(s2)) {//s2只有满和空两种状态,这里不空就是满了
			printf("队列已满,入队失败!");
			return 0;
		}
		else {//s2为空,把s1的元素全部赋给它,注意,是全部!
			while (!StackEmpty(s1)) {
				Pop(s1, &tmp);
				Push(s2, tmp);
			}
		}
		Push(s1, x);
	}
	else {//s1没满,直接压进去就行了
		Push(s1, x);
	}
	return 1;
}

模拟出队

//模拟出队
int DeQueue(SqStack* s1, SqStack* s2, int* x) {
	int tmp = 0;//用于后面出栈带出出栈元素
	if (!StackEmpty(s2)) {//s2不空,直接从s2出
		Pop(s2, x);
		return 1;
	}
	else {//s2是空的
		if (StackEmpty(s1)) {//s1也是空的
			printf("队列已空,出队失败");
		}
		else {//s1不空
			//把s1的元素全部移动到s2, 注意,是全部!
			while (!StackEmpty(s1)) {
				Pop(s1, &tmp);
				Push(s2, tmp);
			}
		}
	}
	Pop(s2, x);
	return 1;
}

模拟队列打印函数

void Qprint(SqStack s1,SqStack s2) {//两个栈实现的模拟队列打印
	int tmp = 0;
	while (!StackEmpty(&s2)) {//s2不空
		Pop(&s2, &tmp);
		printf("%d ", tmp);
	}
	while (!StackEmpty(&s1)) {//s1不空,把s1的元素全部移动到s2
		Pop(&s1, &tmp);
		Push(&s2, tmp);
	}
	while (!StackEmpty(&s2)) {//s2又有元素了,重复上面的操作
		Pop(&s2, &tmp);
		printf("%d ", tmp);
	}
}

入队用例测试

int main() {//入队测试
	SqStack s1;//每个栈5个大小,最终的队列最大size为10
	SqStack s2;
	InitStack(&s1);
	InitStack(&s2);
	
	
	int x = 0;
	printf("请输入要入队的元素:");
	while (scanf("%d", &x) != EOF) {
		int tmp=EnQueue(&s1, &s2, x);//看看当前是否成功入队
		if (tmp == 1) {
			printf("当前队列中元素为:");
			Qprint(s1, s2);
			printf("\n");
		}
	}

	printf("\n");


	return 0;
}

在这里插入图片描述

出队用例测试

int main() {//入队测试
	SqStack s1;//每个栈5个大小,最终的队列最大size为10
	SqStack s2;
	InitStack(&s1);
	InitStack(&s2);
	
	//先入队五个
	EnQueue(&s1, &s2, 1);
	EnQueue(&s1, &s2, 2);
	EnQueue(&s1, &s2, 3);
	EnQueue(&s1, &s2, 4);
	EnQueue(&s1, &s2, 5);

	printf("\n");

	//出队测试
	int x = 5;
	int tmp = 0;
	while (x) {
		DeQueue(&s1, &s2, &tmp);
		printf("已移除队首元素%d ", tmp);
		printf("当前队列元素为:");
		Qprint(s1, s2);
		printf("\n");
		x--;
	}

	return 0;
}

在这里插入图片描述

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

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

相关文章

目标检测 图像处理 计算机视觉 工业视觉

目标检测 图像处理 计算机视觉 工业视觉 工业表盘自动识别&#xff08;指针型和数值型&#xff09;智能水尺识别电梯中电动车识别&#xff0c;人数统计缺陷检测&#xff08;半导体&#xff0c;电子元器件等&#xff09;没带头盔检测基于dlib的人脸识别抽烟检测和睡岗检测/驾驶疲…

【Python语言速回顾】——数据可视化基础

目录 引入 一、Matplotlib模块&#xff08;常用&#xff09; 1、绘图流程&常用图 ​编辑 2、绘制子图&添加标注 ​编辑 3、面向对象画图 4、Pylab模块应用 二、Seaborn模块&#xff08;常用&#xff09; 1、常用图 2、代码示例 ​编辑 ​编辑 ​编辑 ​…

.net 5 发布后swagger页面不显示问题

1&#xff1a;项目右键属性-》生成xml--用于swagger文件读取 2&#xff1a;开启文件配饰swagger读取指定文件

AD9371 官方例程HDL JESD204B相关IP端口信号

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

AI文章扩写:从1百字到1万字

人工智能&#xff08;AI&#xff09;作为一项前沿技术&#xff0c;正逐渐渗透到各个领域中。在写作领域&#xff0c;AI的应用已经取得了显著进展。本文将重点探讨如何利用人工智能扩写文章&#xff0c;为写作者提供一种快速、高效的创作辅助工具。 01 — AI文章扩写原理 人工…

跨境电商的新引擎:崛起的网红经济

随着全球数字化时代的崛起&#xff0c;跨境电商成为了国际贸易的新引擎&#xff0c;而在这个巨大的变革浪潮中&#xff0c;网红经济正在崭露头角&#xff0c;成为这一引擎的有力推动者。在这篇文章中&#xff0c;我们将深入探讨网红经济如何催生跨境电商的新动力&#xff0c;以…

手机端运维管理系统——图扑 HT for Web

随着信息技术的快速发展&#xff0c;网络技术的应用涉及到人们生活的方方面面。其中&#xff0c;手机运维管理系统可提供数字化、智能化的方式&#xff0c;帮助企业和组织管理监控企业的 IT 环境&#xff0c;提高运维效率、降低维护成本、增强安全性、提升服务质量&#xff0c;…

vue 自己捣鼓周日程日历组件

需求:想要一个周日程表,记录每天的计划,点击可查看详情。可自定义时间段通过后台获取时间段显示 分析: 通过需求,超级课程表app这款软件其中课表和这个需求很像,只不过这个需求第一列的时间段是自定义的,不是上午下午两个,但是原理都差不多 原本想找一些第三方插件使…

【23真题】千万别考这所!题目太格路了!

今天分享的是23年宁波大学912的信号与系统试题及解析。 本套试卷难度分析&#xff1a;22年宁波大学912考研真题&#xff0c;我也发布过&#xff0c;若有需要戳这里自取&#xff01;22年题目还很正常&#xff0c;23年突然剑走偏锋&#xff0c;24年能不能恢复我不知道。但是你难…

安卓现代化开发系列——从生命周期到Lifecycle

由于安卓已经诞生快二十载&#xff0c;其最初的开发思想与现代的开发思想已经大相径庭&#xff0c;特别是Jetpack库诞生之后&#xff0c;项目中存在着新老思想混杂的情况&#xff0c;让许多的新手老手都措手不及&#xff0c;项目大步向屎山迈进。为了解决这个问题&#xff0c;开…

jenkins实践篇(2)—— 自动打tag的可回滚发布模式

大家好&#xff0c;我是蓝胖子&#xff0c;在上一篇我简单介绍了如何基于特定分支做自动编译和发布&#xff0c;在生产环境中&#xff0c;为了更加安全和快速回滚&#xff0c;我采取的是通过对代码打tag的方式来进行部署&#xff0c;下面我将详细介绍整个发布过程的逻辑。 发布…

spring 和 idea 建议不要使用 @Autowired注解

spring 和 idea 建议不要使用 Autowired注解 一. 问题描述二. 警告原因和如何去除三. 个人的收获和解决方案3. 1 个人感受3.2 通过构造函数解决警告问题 四. 小知识4.1 使用Autowired还会出现循环依赖的问题么4.2 Autowired 和 Resource区别 前言 这是我在这个网站整理的笔记,有…

使用Fiddler进行Mock测试

1、接口抓包 找到要mock的接口&#xff0c;打开fiddler抓包 以某某接口为例&#xff0c;找到下面的接口 http://XXX/SYSTEMS 2、复制该接口数据到本地 在接口上进行右键点击&#xff0c;选择save -> …and Open as Local File -> 默认会保存至桌面&#xff0c;示例中的数…

文件详细操作过程(C语言)

&#x1f31e;&#x1f31e;&#x1f31e;千淘万漉虽辛苦&#x1f31e;&#x1f31e;&#x1f31e; &#x1f31e;&#x1f31e;&#x1f31e;吹尽狂沙始到金&#x1f31e;&#x1f31e;&#x1f31e; &#x1f307;C语言文件操作 &#x1f34a;文件的定义&#x1f34b;什么是文…

YOLOv5优化:独家创新(Partial_C_Detect)检测头结构创新,实现涨点 | 检测头新颖创新系列

💡💡💡本文独家改进:独家创新(Partial_C_Detect)检测头结构创新,适合科研创新度十足,强烈推荐 SC_C_Detect | 亲测在多个数据集能够实现大幅涨点 ​​​​​​​ 💡💡💡Yolov5/Yolov7魔术师,独家首发创新(原创),适用于Yolov5、Yolov7、Yolov8等各个Y…

python写一个敲木鱼加功德(加音效和敲击动作)

界面展示及视频演示 1、先做一个基本界面 import tkinter from PIL import Image, ImageTk # pip install pillow# 界面 toptkinter.Tk() top.title(敲木鱼加功德) top.geometry(410x400) top.configure(bgblack)# 准备图片 qiaomuyutupianImageTk.PhotoImage(file敲木鱼.jpg)…

ElasticSearch搜索技术深入与聚合查询实战

ES分词器详解 基本概念 分词器官方称之为文本分析器&#xff0c;顾名思义&#xff0c;是对文本进行分析处理的一种手段&#xff0c;基本处理逻辑为按照预先制定的分词规则&#xff0c;把原始文档分割成若干更小粒度的词项&#xff0c;粒度大小取决于分词器规则。 分词发生时…

150行代码实现一个极简的Canvas多功能画板

目录 1.前言2.多功能画板的实现2.1 画板初始化2.2 画笔2.3 橡皮擦2.4 清屏2.5 前进和后退 3.小结 1.前言 HTML5提供的Canvas标签能实现很多有趣的效果&#xff0c;本文就来分享一下如何使用Canvas来实现一个极简的多功能画板。先来看效果&#xff1a; 主要实现以下功能&…

如何制作一款资源网站app

简介 平时生活学习中我们会经常登录各种网站&#xff0c;比如看电影&#xff0c;看视频学习&#xff0c;找资料等等。有时想找到一个靠谱的网站&#xff0c;花了很长时间也找不到。我自己收集了很多好的网站&#xff0c;主要是找资源的&#xff0c;然后我做了一个导航app软件&…

webpack 高级

高级配置就是要进行 webpack 优化&#xff0c;让代码在编译、运行时性能更好 主要从以下角度去优化&#xff1a; 1、提升开发体验 2、提升打包构建速度 3、减少代码体积 4、优化代码运行性能 一、提升体验 1、SourceMap 为什么 打包出来的所有css和js合并成了一个文件&#…