将编号为0和1的两个栈存放于一个数组空间V[m]中。

目录

1.题目描述

2.算法实现


1.题目描述

 

将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空;当第1号栈的栈顶指针top[1]等于m时该栈为空。两个栈均从两端向中间增长(见图)。试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。

2.算法实现

 

#include<bits/stdc++.h>
#define MAXSIZE 100
using namespace std;typedef struct
{int top[2],bot[2];  //栈顶和栈底指针int  *V;       //栈数组int m;          //栈最大可容纳元素个数
} DblStack;int InitDblStack(DblStack &S)
{S.V=new int [S.m];S.m=MAXSIZE;S.top[0]=-1;S.top[1]=S.m;return 1;
}int  isEmpty(DblStack &S)
{if(S.top[0]==-1&&S.top[1]==S.m)return 1;else return 0;
}int  isFull(DblStack &S)
{if(S.top[1]-S.top[0]==-1||S.top[1]<0||S.top[0]>S.m-1)return 1;else return 0;
}int  Push(DblStack &S,int i,int e)
{//i为栈号,i为0表示左栈,i=1表示右栈,e是入栈元素。if(i<0||i>1){cout<<"栈号输入不对"<<endl;exit(0);}if(S.top[1]-S.top[0]==1){cout<<"栈已满!";return 0;}switch(i){case 0:{S.top[0]++;S.V[S.top[0]]=e;return 1;break;}case 1:{S.V[S.top[1]]=e;S.top[1]--;return 1;break;}}
}int Pop(DblStack &S,int i)
{/*退栈。i代表栈号,i=0为左栈,i=1为右栈退栈成功时返回退栈元素*/if(i<0||i>1){cout<<"栈号输入不对"<<endl;exit(0);}switch(i){case 0:if(S.top[0]==-1){cout<<"栈空!";return -1;}else return (S.V[S.top[0]]--);case 1:if(S.top[0]==S.m){cout<<"栈空!";return -1;}else return (S.V[S.top[1]]++);}
}void printDblStack(DblStack &S,int i)
{//遍历双栈,i为0遍历左栈,i为1遍历右栈switch(i){case 0:{for(int i=0;i<S.top[0];i++)cout<<S.V[i]<<" ";}case 1:{for(int i=S.m;i<S.top[1];i--)cout<<S.V[i]<<" ";}}cout<<"\n";
}void display()
{cout<<"   1.双栈初始化!\n\n""   2.判断栈空!\n\n""   3.判断栈满!\n\n""   4.元素进栈!\n\n""   5.元素出栈!\n\n""   6.遍历双栈!\n\n""   0.退出!\n\n";
}
int main()
{DblStack S;int i,e;bool a=true;display();while(a){int n;cout<<"请输入序号:";cin>>n;switch(n){case 1:{if(InitDblStack(S))cout<<"双栈初始化成功!\n\n";break;}case 2:{if(isEmpty(S)) cout<<"栈空!\n\n";else cout<<"栈非空!\n\n";break;}case 3:{if(isFull(S)) cout<<"栈满!\n\n";else cout<<"栈未满!\n\n";break;}case 4:{cout<<"输入0进左栈,1进右栈:";cin>>i;cout<<"请输入进栈元素:";cin>>e;if(Push(S,i,e))cout<<"元素进栈成功!\n\n";else cout<<"元素进栈成功!\n\n";break;}case 5:{cout<<"输入0出左栈,1出右栈:";cin>>i;cout<<"出栈元素是:"<<Pop(S,i)<<"\n\n";break;}case 6:{cout<<"输入0遍历左栈,1遍历右栈:";cin>>i;printDblStack(S,i);break;}case 0:{a=false;cout<<"已退出!\n\n";break;}}}return 0;
}

 

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

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

相关文章

【JDBC】Eclipse连接Mysql

学习完servlet终于可以学习JDBC了&#xff0c;下载安装完mysql&#xff0c;导入jar包后&#xff0c;就可以利用java对mysql进行一系列的操作了 连接数据库并插入数据的代码 package com.k1998;import java.sql.Connection; import java.sql.Driver; import java.sql.DriverMa…

ASP.NET Core 2.0 依赖注入

问题 如何使用 ASP.NET Core 服务容器进行依赖注入&#xff1f; 答案 创建一个服务 public interface IGreetingService { string Greet(string to); } public class GreetingService : IGreetingService { public string Greet(string to){ return $"H…

CF741D-Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths【树上启发式合并】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidCF741D 题目大意 一棵根为111的树&#xff0c;每条边上有一个字符(a−v(a-v(a−v共222222种)))。 一条简单路径被称为Dokhtar−koshDokhtar-koshDokhtar−kosh当且仅当路径上的字符经过重新排序后可以…

用数组存储字符C进行回文检测

#include<bits/stdc.h> using namespace std;int main() {char c[20];int i,j;cout<<"请输入字符c:";cin>>c;int nstrlen(c);for(i0,jn-1;i<j;i,j--){if(c[i]!c[j]) break;}if(i>j) cout<<"是回文&#xff01;";else cout&l…

面试 - 要不简单聊一下你对MySQL索引的理解?

转载自 面试 &#xff0d; 要不简单聊一下你对MySQL索引的理解&#xff1f; MySQL索引&#xff1f;这玩意儿还能简单聊&#xff1f;明显是在挖坑&#xff0c;幸好老夫早有准备&#xff0c;切听我一一道来。 一、索引是什么? 索引是帮助MySQL高效获取数据的数据结构。 二、…

ABP从入门到精通(4):使用基于JWT标准的Token访问WebApi

项目&#xff1a;asp.net zero 4.2.0 .net core&#xff08;1.1&#xff09; 版本 我们做项目的时候可能会遇到需要提供api给app调用&#xff0c;ABP动态生成的WebApi提供了方便的基于JWT标准的Token访问方式供我们访问API&#xff0c;不用在代码上做任何改动&#xff0c;很方便…

jzoj2700-数字【数论,LCM】

正题 luogu题目链接:https://www.luogu.org/problemnew/show/P4193 题目大意 定义一个函数D(x)D(x)D(x)和S(x)S(x)S(x)&#xff0c;S(x)S(x)S(x)表示xxx的各位之和 D(n){D(S(n)),S≥10S(n)D(n)\left\{\begin{matrix} \\D(S(n)),S\geq 10 \\S(n) \\ \\ \end{matrix}\right.D(n…

【Servlet】获取并输出服务器获得的数据

获取&#xff1a; String name req.getParameter(“username”); System.out.println(name); 输出 PrintWriter pw resp.getWriter(); pw.write(name); 学习serlvet的最佳学习地点https://www.bilibili.com/video/av68412637/?p136servlet知识点&#xff1a;servlet接口&…

回文是指正读反读均相同的字符序列;如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符序列是否是回文。(提示:将一半字符入栈)

文章目录 1.题目描述 2.算法实现 1.题目描述 回文是指正读反读均相同的字符序列&#xff1b;如“abba”和“abdba”均是回文&#xff0c;但“good”不是回文。试写一个算法判定给定的字符序列是否是回文。&#xff08;提示&#xff1a;将一半字符入栈&#xff09; 2.算法实现…

ASP.NET Core 2.0 + EF6 + Linux +MySql混搭

好消息&#xff01;特好消息&#xff01;同时使用ASP.NET Core 2.0和.NET Framework类库还能运行在linux上的方法来啦&#xff01; 是的&#xff0c;你没有看错&#xff01;ASP.NET Core 2.0&#xff0c;.NET Framework类库&#xff0c;linux通通都给你&#xff0c;不要998只要…

面试被问Mysql没答上来?阿里P5:总结了55道常见面试题,收藏一波

转载自 面试被问Mysql没答上来&#xff1f;阿里P5:总结了55道常见面试题&#xff0c;收藏一波 正文开始前&#xff0c;分享阿里 P8 高级架构师吐血总结的 《Java 核心知识体系&面试资料.pdf》, 非卖课程的哟&#xff01; 阿里 P8 级高级架构师吐血总结的一份 Java 核心知…

jzoj3511-cza的蛋糕【状态压缩dp,dfs】

正题 题目大意 n∗mn*mn∗m的矩阵&#xff0c;有些阻挡&#xff0c;求至少要多少个1∗21*21∗2或2∗12*12∗1的块铺在上面使得没用可以继续铺的地方。 解题思路 因为mmm很小&#xff0c;明显状压。 用fi,j,kf_{i,j,k}fi,j,k​表示第iii行&#xff0c;上一行状态为jjj&#xff…

【C单链表】链表与尾插法

struct struct的几种用法。 1、基本结构体定义 struct stu {int score;int id;char name[20]; };2、进阶结构体定义 struct stu {int score;int id;char name[20]; }st1;下面多了个st1&#xff0c;其实就相当于 struct stu {int score;int id;char name[20]; }; struct stu…

请设计一个栈,实现十进制数转任意进制数。

文章目录 1.题目描述 2.代码实现 1.题目描述 请设计一个栈&#xff0c;实现十进制数转任意进制数 2.代码实现 #include <iostream> using namespace std;#define MAXSIZE 100typedef struct {int *base;//栈底指针int *top;//栈顶指针int stacksize;//栈最大容量 } S…

开源纯C#工控网关+组态软件(四)上下位机通讯原理

一、 网关的功能&#xff1a;承上启下 最近有点忙&#xff0c;更新慢了。感谢园友们给予的支持&#xff0c;现在github上已经有。目标是最好的开源组态&#xff0c;看来又近一步^^ 之前有提到网关是物联网的关键环节&#xff0c;它的作用就是承上启下。 下位机有下位机的语言…

【Java】继承与多态

1、继承 由于一个对象功能的单一性&#xff0c;我们想对其进行扩展&#xff0c;但想保留其属性和功能&#xff0c;我们就必须用到继承。 java继承的特性&#xff1a; 单继承&#xff1a;java里的对象不同于C&#xff0c;只能进行单继承&#xff0c;即一个对象只能有一个父亲 …

C++描述 国王给骑士发放金币 ||

C描述 国王给骑士发放金币 || 国王将金币作为工资&#xff0c;发放给忠诚的骑士。第一天&#xff0c;骑士收到一枚金币&#xff1b;之后两天&#xff08;第二天和第三天&#xff09;&#xff0c;每天收到两枚金币&#xff1b;之后三天&#xff08;第四、五、六天&#xff09;&a…

jzoj3519-灵能矩阵【LCM,树形dp】

正题 题目大意 一棵树&#xff0c;每个叶子节点有权值&#xff0c;每个点的权值是它这棵子树中的所有叶子节点权值之和。可以减少叶子节点的值&#xff0c;要求减少最少的值使得对于每个点&#xff0c;它的所有子节点的权值都相等。 解题思路 如果将叶子节点的深度优先访问顺…

微软Tech Summit 2017,等你来打Call

2017年10月31至11月3日&#xff0c;由微软举办的Tech Summit 2017技术暨生态大会将在北京盛大举办&#xff0c;要在北京连开四天。今年的技术大会看头十足&#xff0c;不仅有大咖级人物带来十二大主题课程&#xff0c;更有三天四场的主题之夜。微软技术大会最早是由微软技术教育…

C++描述杭电OJ 2021.发工资 ||

C描述杭电OJ 2021.发工资 || Problem Description 财务处的小胡老师最近就在考虑一个问题&#xff1a;如果每个老师的工资额都知道&#xff0c;最少需要准备多少张人民币&#xff0c;才能在给每位老师发工资的时候都不用老师找零呢&#xff1f; 这里假设老师的工资都是正整数…