数据结构习题解析与实验指导-严蔚敏数据结构-第三章:栈和队列(刷题记录)

2023-11-10

目录

第三章:栈和队列(刷题记录)P[48-49]

第一题:2022年4月15日 星期五 晚上19:20 - 19:35


第三章:栈和队列(刷题记录)
P[48-49]

第一题:2022年4月15日 星期五 晚上19:20 - 19:35

【算法思想】
两栈共享向量空间,将两栈栈底设在向量两端,初始时,左栈顶指针为-1,右栈顶为m。两栈顶指针相邻时为栈满。两栈顶相向增长,栈顶指针指向栈顶元素。左栈是通常意义下的栈,在进栈操作时,其栈顶指针右移(加1),出栈时,栈顶指针左移(减1)。而右栈进栈操作时,其栈顶指针左移(减1),出栈时,栈顶指针右移(加1)。

【算法描述】  

typedef struct{
	int top[2], bot[2];			//栈顶和栈底指针
	ElemType* V;				//栈数组
	int m;						//栈最大可容纳元素个数
}DblStack;						//两栈类型

//1
Status InitDblStack(DblStack& S, int m)
{//初始化一个大小为m的双向栈s
	S.V = new ElemType[m];		//动态分配一个最大容量为m的数组空间
	S.bot[0] = -1;				//左栈栈底指针
	S.bot[1] = m;				//右栈栈底指针
	S.top[0] = -1;				//左栈栈顶指针
	S.top[1] = m;				//右栈栈顶指针
	return 0;
}
Status DblPush(DblStack S, int i,int x)
{//向指定的i号栈中插入元素x
	if (S.top[i] - S.top[0] == 1)
	{
		return ERROR;
	}
	if (i == 0)
	{
		S.V[++S.top[0]] = x;		//左栈;栈顶指针先加1,然后按照此地址进栈
	}
	else
	{
		S.V[--S.top[1]] = x;		//左栈;栈顶指针先加1,然后按照此地址进栈
	}
}
Status DblPop(DblStack& S, int i, ElemType& x)
{//删除指定的i号栈的栈顶元素,用x返回其值
	if (S.top[i]==S.top[i])			//栈空
	{
		return ERROR;
	}
	if (i == 0)
	{
		x = S.V[S.top[0]--];		//左栈;栈顶指针减1
	}
	else
	{
		x = S.V[S.top[0]++];		//左栈;栈顶指针加1
	}
	return OK;
}
int IsEmpty(DblStack S, int i)
{//判断指定的i号栈是否为空,空返回1,否则返回0
	return (S.top[i] == S.bot[i]);
}
int IsFull(DblStack S)
{//判断栈是否满,满则返回1,否则返回0
	if (S.top[0] + 1 == S.top[1])
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

//测试
int main()
{
	int m;		//双向栈的元素个数
	int i;		//栈号
	ElemType x; //元素
	cout << "可以运行啊!nice啊!";
	cout << endl;
	DblStack S;
	cout << "请输入双向栈的元素个数:";
	cin >> m;
	if (InitDblStack(S, m))
	{
		cout << "初始化成功!" << endl;
	}
	cout << "初始化栈" << endl;
	cout << "向第几号栈添加元素:";
	cin >> i;
	for (int j = 0; j < m/2; j++)
	{
		cout << "将第" << j << "个元素入栈"<<i<<"中: ";
		cin >> x;
		DblPush(S, i, x);
	}
	cout << "删除第几号栈顶元素:";
	cin >> i;
	if (DblPop(S, i, x))
	{
		cout << "删除成功!";
	}
	else
	{
		cout << "删除失败!";
	}
	cout << "判断第几号栈是否为空:";
	cin >> i;
	if (IsEmpty(S,i))
	{
		cout << "栈为空!"<<endl;
	}
	else
	{
		cout << "栈不为空!"<<endl;
	}
	cout << "判断当前栈是否为满:";
	if (IsFull(S))
	{
		cout << "栈已满!";
	}
	else
	{
		cout << "栈未满!";
	}
	cout << endl;
	cout << "20213002624李季鸿代码";
	system("pause");
	return 1;
}

第二题:2022年5月10日 星期二 晚上20:10 - 20:30

【算法思想】

将字符串前一半入栈,然后,栈中元素和字符串后一半进行比较。即将第一个出栈元素和后一半串中第一个字符比较,若相等,则再出栈一个元素与后一个字符比较,以此类推,直至栈空,在这种情况下可判定该字符序列是回文。如果出栈元素与串中的字符进行比较时出现不等的情况,则可判定该字符序列不是回文。

【算法描述】  

int IsPalindrome(char* t)
{//判断t字符向量是否为回文,若是,返回1,否则返回0
	int i;
	char temp,e;
	SqStack S;
	InitStack(S);
	int len = strlen(t);				//求向量的长度
	for ( i = 0; i < len / 2; i++)
	{//将一半字符入栈
		Push(S, t[i]);
	}
	if (len % 2 != 0)
	{
		i++;			//长度为奇数,跳过中间字段
	}
	while (!StackEmpty(S))
	{//每弹出一个字符与相应字符比较
		temp = Pop(S,e);
		if (temp != t[i])
		{
			return 0;			//不等则返回0
		}
		else
		{
			i++;
		}
	}
	return 1;                   //比较完毕均相等则返回1
}

 由于第三题实在没有含金量,就不写了。

第三题:2022年5月10日 星期二 晚上20:25 - 20:40

【算法思想】

根据ai的值判断进行入栈或者出栈操作,入栈前首先判断是否栈满,出栈前先判断是否栈空,
随后再进行相关操作。

【算法描述】  

 

(持续更新中。。。。。。) 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构习题解析与实验指导-严蔚敏数据结构-第三章:栈和队列(刷题记录) 的相关文章

  • 为 DocumentDb 设置自定义 json 转换器

    我正在使用类型化 DocumentQuery 从 Azure DocumentDb 集合中读取文档 from f in client CreateDocumentQuery
  • 如何使用不同的基本路径托管 Blazor WebAssembly 应用程序

    我有一个 Blazor Webassemble NET 托管应用程序 在我们托管它的服务器上 应用程序的基本路径将是mydomain com coolapp 因此 为了尝试让应用程序在服务器上正确呈现 我一直遵循本页 应用程序基本路径 部分
  • 使用 POST 的 HttpWebRequest 的性能

    我有一个用于测试网络服务的小工具 它可以使用 POST 或 GET 调用 Web 服务 使用POST的代码是 public void PerformRequest WebRequest webRequest WebRequest Creat
  • 每个元素的 asp.net Web 表单自定义错误消息

    我创建了一个 Web 应用程序 表单 以及后端 SQL 插入和查询 目前我正在显示所有用户错误消息 div style padding 1em div
  • 如何以编程方式删除受信任的根证书颁发机构中的证书?

    我需要能够从组织中的每台电脑中删除特定的证书 是的 我可以逐个座位 但我要到周四才能完成 而且我没有人力逐个座位 是否有使用 C 的编程方式来执行此操作 我认为你不需要编写任何 C 看看certmgr exe del http msdn m
  • Visual Studio 2013 调试器显示 std::string 的奇怪值

    我有一个大型的 cmake 生成的解决方案 其中包含许多项目 由于某种原因 我无法查看字符串的内容 因为根据调试器 Bx Buf含有一些垃圾 text c str 正确返回 Hello 该问题不仅仅发生在本地字符串上 返回的函数std st
  • 获取列表框中视图中的项目

    我有一个 ListBox 其属性 VirtualizingStackPanel VirtualizationMode 设置为 回收 我正在绑定一个自定义集合 实现IList and IList
  • 如何在 C# 中以编程方式将行添加到 DataGrid?

    正如标题所述 我正在尝试使用 C 以编程方式将行添加到 DataGrid 但我似乎无法使其工作 这是我到目前为止所拥有的 I have a DataGrid declared as dg in the XAML foreach string
  • 加载 QPixmap 数据的更好方法

    更好的方法来做到这一点 没有QImage QImage image width height QImage Format RGB888 memcpy image bits m frameRGB gt data 0 height width
  • 自己绘制的WPF自定义滑块

    这是我关于堆栈溢出的第一个问题 所以不要踢它 我在尝试创建 Mac 风格的滑块控件时遇到问题 我已经发现这个解决方案 http www codeproject com KB miscctrl MAC Slider aspx我已经在我的解决方
  • 重载算术运算符

    赋值运算符可以声明为 T 运算符 const t 在类中 但不能以这种方式定义算术运算符 它必须是友元函数 我不明白为什么 你能解释一下吗 算术运算符不必须是友元 那么你可以这样定义 MyClass MyClass operator con
  • 从图像创建半透明光标

    是否可以从图像创建光标并使其半透明 我目前正在拍摄自定义图像并覆盖鼠标光标图像 如果我可以将其设为半透明 那就太好了 但不是必需的 销售人员喜欢闪亮的 目前正在做这样的事情 Image cursorImage customImage Get
  • 当我尝试传递临时地址作为参数时,它是一个 UB 吗?

    对于以下 C 代码 include
  • 使用任一默认捕获模式时,这是通过复制捕获还是 (*this) 通过引用捕获?是一样的吗?

    当我看到以下工作时我有点困惑 struct A void g void f g 但后来我发现this https stackoverflow com a 16323119 5825294答案非常详细地解释了它是如何工作的 本质上 它归结为t
  • MINIX内部碎片2

    我正在用 C 语言编写一些软件 它递归地列出给定目录中的所有文件 现在我需要计算出内部碎片 我花了很长时间研究这个问题 发现 ext2 上的内部碎片只发生在最后一个块中 我知道理论上你应该能够从索引节点号获得第一个和最后一个块地址 但我不知
  • 如何在VS2005中使用从.bat而不是.exe启动的外部程序进行调试?

    在我的 c 项目的调试属性中 我选择了 启动外部程序 并选择了我希望将调试器附加到的程序的 exe 但是 现在我需要从 bat 文件而不是 exe 启动程序 但 VS2005 似乎不允许这样做 这可能吗 编辑 为了澄清 我需要调试从 bat
  • g++ / gcc 是否支持 C++20 新的atomic_flag 功能?

    根据参考参数 https en cppreference com w cpp atomic atomic flag c 20 有丰富的 对我来说有用的 支持atomic flag运营 然而 目前尚不清楚 gcc 是否支持这些功能 它们在任何
  • Windows Phone 的 JSON 反序列化

    我正在尝试反序列化以下 JSON 但我真的不知道如何使用 JSON net 来完成这项工作 我正在使用 C 和 JSON Net 库 我的 JSON 如下 found 3 bounds 43 54919 172 62148 43 54487
  • 查找数组中的多个索引

    假设我有一个像这样的数组 string fruits watermelon apple apple kiwi pear banana 是否有一个内置函数可以让我查询 apple 的所有索引 例如 fruits FindAllIndex ap
  • Adobe Illustrator 中的折线简化如何工作?

    我正在开发一个记录笔划的应用程序 您可以使用定点设备来绘制笔划 在上图中 我绘制了一个笔划 其中包含 453 个数据点 我的目标是大幅减少数据点的数量 同时仍然保持原始笔画的形状 对于那些感兴趣的人 上图笔画的坐标可以作为GitHub 上的

随机推荐

  • 静态地址重定位 与 动态地址重定位

    静态地址重定位 即在程序装入内存的过程中完成 是指在程序开始运行前 程序中的各个地址有关的项均已完成重定位 地址变换通常是在装入时一次完成的 以后不再改变 故成为静态重定位 优点 无需硬件支持 缺点 1 程序重定位之后就不能在内存中搬动了
  • QT定时器的使用

    QT定时器的使用 使用QTimer定时器类 1 首先创建一个定时器类的对象 QTimer timer new QTimer this 2 timer 超时后会发出timeout 信号 所以在创建好定时器对象后给其建立信号与槽 connect
  • jenkins学习笔记第五篇使用参数化解决ant+jemeter生成报告问题

    jenkins插件还是很强大的 这里用到的插件是Date Parameter 在参数化构建过程中添加参数 这里具体使用如下 可以在项目构建里 添加shell 具体引入方式如 echo DateParameter 在windows下使用的是w
  • windows node.js二进制文件的下载与配置

    1 下载 下载地址 http nodejs cn download 根据自己的电脑下载 2 将压缩包解压到你想安装的位置 3 在解压之后的文件夹中创建两个文件夹 node global npm全局安装位置 和node cache npm 缓
  • 使用Aspose在C#中将PLT转换为PDF或JPEG图像

    PLT是用于绘图仪机器的基于矢量的格式 但是 只有少数应用程序支持此格式 因此可能需要根据需要转换为更兼容的格式 使用Aspose只需几个简单的步骤即可将PLT文件转换为PDF PNG或JPEG图像 让我们学习以下部分以获取更多详细信息 在
  • 微信支付报错:用户传入的appid不正确,请联系商户处理

    微信APP支付的时候 报用户传入的appid不正确 请联系商户处理错误 解决方案 1 确保所有配置正确 2 可以检查一下签名的大小写
  • Kali--MSF-永恒之蓝详解(复现、演示、远程、后门、加壳、修复)

    目录 一 永恒之蓝概述 二 SMB协议 三 准备工作 四 漏洞复现 1 主机发现 2 端口扫描 3 利用模块 五 演示功能 1 获取cmd 2 捕获屏幕 3 上传文件 4 下载文件 5 远程登录 6 上传后门 7 免杀加壳 8 运行wann
  • 开博说明

    新开博客 开博说明 开博说明 大家好 这是我个人第一个技术博客 由于本人工作涉及金融量化方面 我会在今后的博客中主要涉及如下内容 方便有志之士一起探讨学习 也方便我个人查漏补缺 谢谢 python pandas sklearn tensor
  • MATLAB生成 FPGA代码

    写作时间 2020 12 13 标题 使用 HDL Coder 将 MATLAB 转换为 FPGA 目录 1 从 MATLAB 生成 HDL 代码 2 MATLAB 到硬件工作流 3 MATLAB 算法示例 正文 1 从 MATLAB 生成
  • PyQt4编程之如何做菜单栏

    菜单栏是大部分软件都有的 菜单栏能提供便捷的帮助 记事本的菜单栏就是最简单的一个例子 等过几天我会写记事本的菜单栏了再另外发代码出来 下面的代码是Copy的 import sys from PyQt4 import QtGui QtCore
  • Python2,python3调用face++api

    由于官网给的api只能支持python2 然而自己改成3的话特别麻烦 花了两三天都没有改好 查阅各种资料都没有结果 今天偶遇一代码 非常感谢这位博主 现将其代码和我的使用样例献上 希望能够帮助到和我一样的小白 该博主的代码 Face API
  • 用Lex(flex)和yacc(bison)写的简单计算器

    Lex文件如下 include cal tab h option noyywrapinteger 0 9 dreal 0 9 0 9 ereal 0 9 0 9 EedD 0 9 real dreal ereal nl nplus minu
  • 使用ipv6内网穿透,实现私有云盘搭建,实现远程控制等功能

    文章目录 问题 获得计算机的ipv6地址 ipv6变化问题 解决 桌面远程控制 ipv6控制路由器 解决 私有云盘搭建 创建服务端B的环境配置 创建服务端可以访问的用户账户 配置服务器对ipv6地址访问的监听 创建ipv6访问客户端 NAT
  • ubuntu使用docker安装jdk和tomcat (一)

    Docker是一个开源的引擎 可以轻松的为任何应用创建一个轻量级的 可移植的 自给自足的容器 开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署 包括VMs 虚拟机 bare metal OpenStack 集群和其他的基础应用平
  • IP地址的组成和划分(3)

    文章目录 一 IP地址组成 二 IP地址的划分 1 A类地址 2 B类地址 3 C类地址 4 D类地址 5 E类地址 一 IP地址组成 IP地址由4部分数字组成 每部分数字对应于8位二进制数字 各部分之间用小数点分开 这是点分二进制 如果换
  • 解决mysql不是内部或外部命令 环境变量 并且

    安装Mysql后 当我们在cmd中敲入mysql时会出现 Mysql 不是内部或外部命令 也不是可运行的程序或其处理文件 打开我的电脑在我的电脑右键中选择属性 然后单击选择高级系统设置 在系统属性的 高级 中选择环境变量path 选择Mys
  • 宏观经济浅学20210711

    M2 大类资产配置 GDP 周期 https www bilibili com video BV1V5411e76f from search seid 3336101618933886388 宏观经济站把控 统治地位 宏观经济研究 经济为什
  • 三合一浴霸必须一直接通取暖开关才能控制照明和风扇的解决方法

    刚新租了一个二室房子 入住后发现这样一个奇怪的问题 要想只让三合一 照明 取暖 通风 浴霸只照明或者只通风 必须得把取暖打开才行 并且取暖必须一直打开 否则一旦断开 照明和取暖也用不了了 头一次遇见这样的问题 首先怀疑是否是浴霸就是这么设计
  • Kotlin IO操作

    前段时间学习了一点内容 写了一篇Groovy开发工具包 我当时就在想Kotlin怎么没有好用的文件操作API呢 后来我发现我太傻了 Kotlin这么好用的语言怎么可能没有自己的文件API呢 Kotlin的IO操作都在kotlin io包下
  • 数据结构习题解析与实验指导-严蔚敏数据结构-第三章:栈和队列(刷题记录)

    目录 第三章 栈和队列 刷题记录 P 48 49 第一题 2022年4月15日 星期五 晚上19 20 19 35 第三章 栈和队列 刷题记录 P 48 49 第一题 2022年4月15日 星期五 晚上19 20 19 35 算法思想 两栈