利用顺序栈完成的作业题(C语言)

这篇具有很好参考价值的文章主要介绍了利用顺序栈完成的作业题(C语言)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

利用顺序栈完成的作业题(C语言)

/**

* @file name:

						1. 使用顺序栈设计一个把十进制数转换为十六进制数的接口							
						2. 输入包括  '(' 和 ')' 的字符串string ,判断括号的合法性

* @brief

* @author ni456xinmie@163.com

* @date 2024/04/25

* @version 1.0 :

* @property :

* @note

* CopyRight (c) 2023-2024 ni456xinmie@163.com All Right Reseverd

*/

题目一

​ 设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。

// 指的是16进制的位数,如果用户输入的数字比较大,可以根据需要进行修改
#define SIZE 8

// 构造记录顺序栈SequenceStack各项参数(栈底地址+栈容量+栈顶元素的下标)的结构体
typedef struct SequenceStack
{
	char *Bottom; // 记录栈底地址,char类型字符长度足够存放一位十六进制数字
	unsigned int Size;	// 记录栈容量
	int Top;			// 记录栈顶元素的下标
} SeqStack_t;

void *SeqStack_Hex(int Data)
{
	SeqStack_t *Manager = (SeqStack_t *)calloc(1, sizeof(SeqStack_t)); 
    // 1.利用calloc为顺序栈的管理结构体申请一块堆内存,并进行判断
	if (NULL == Manager)
	{
		perror("calloc memory for manager is failed");
		exit(-1); // 程序异常终止
	}
	Manager->Bottom = (DataType_t *)calloc(SIZE, sizeof(DataType_t)); 
    // 2.利用calloc为所有元素申请堆内存,并进行判断
	if (NULL == Manager->Bottom)
	{
		perror("calloc memory for Stack is failed");
		free(Manager);
		exit(-1); // 程序异常终止
	}
	// 3.对管理顺序栈的结构体进行初始化(元素容量 + 最后元素下标)
	Manager->Size = SIZE; // 对顺序栈中的容量进行初始化
	Manager->Top = -1;	  // 由于顺序栈为空,则栈顶元素的下标初值为-1
	while (Data)//将用户输入的数值用作判定条件,为0时退出
	{
		Manager->Bottom[++Manager->Top] = Data % 16;//将余数存放,作为转换后的低位数
		Data = Data / 16;
	}
	while (Manager->Top != -1)
	{
		printf("%X", Manager->Bottom[Manager->Top--]);//从栈顶开始输出转换后的数
	}
	Manager->Bottom == NULL;
	free(Manager);
	free(Manager->Bottom);//释放栈空间
	return;
}


主函数,测试上述程序:

int main(int argc, char const *argv[])
{
	int a;
	printf("Input a decimal number:");
	scanf("%d", &a);
	SeqStack_Hex(a);
	return 0;
}

题目二

通过键盘输入一个包括 '(' 和 ')' 的字符串string ,判断字符串是否有效。要求设计算法实现检查字符串是否有效,有效的字符串需满足以下条件:

A. 左括号必须用相同类型的右括号闭合。

B. 左括号必须以正确的顺序闭合。

C. 每个右括号都有一个对应的相同类型的左括号。

#define SIZE 20 // 指的是一次性输入的字符串长度,用户可以根据需要进行修改

// 构造记录顺序栈SequenceStack各项参数(栈底地址+栈容量+栈顶元素的下标)的结构体
typedef struct SequenceStack
{
	char *Bottom; // 记录栈底地址,用来存放‘(’和‘)’。
	unsigned int Size;	// 记录栈容量,即字符串的最大长度
	int Top;			// 记录栈顶元素的下标
} SeqStack_t;

bool SeqStack_Judge(DataType_t *arr)
{
	SeqStack_t *Manager = (SeqStack_t *)calloc(1, sizeof(SeqStack_t)); // 1.利用calloc为顺序栈的管理结构体申请一块堆内存,并进行判断
	if (NULL == Manager)
	{
		perror("calloc memory for manager is failed");
		exit(-1); // 程序异常终止
	}
	Manager->Bottom = (DataType_t *)calloc(SIZE, sizeof(DataType_t)); // 2.利用calloc为所有元素申请堆内存,并进行判断
	if (NULL == Manager->Bottom)
	{
		perror("calloc memory for Stack is failed");
		free(Manager);
		exit(-1); // 程序异常终止
	}
	// 3.对管理顺序栈的结构体进行初始化(元素容量 + 最后元素下标)
	Manager->Size = SIZE; // 对顺序栈中的容量进行初始化
	Manager->Top = -1;	  // 由于顺序栈为空,则栈顶元素的下标初值为-1
	while (*arr)		  // 将arr的元素作为判断条件,当字符串全部输入结束时可以结束
	{
		if (*arr == '(')
		{
			Manager->Bottom[++Manager->Top] = 1; // 将’(‘放入栈中
		}
		else if (*arr == ')') // 将‘)’出栈
		{
			Manager->Top--;
			if (Manager->Top < -1) // 当’)‘出栈过多,即左边的括号为)时候,判定为无效
			{
				printf("It's a invalid string.\n");
				return false;
			}
		}
		arr++;
	}
	if (Manager->Top != -1) // 当Manager->Top=-1时,表示’(‘和‘)’数量相等,不然的话判定为无效
	{
		printf("It's a invalid string.\n");//无效字符串书判定
	}
	else
	{
		printf("It's a valid string.\n");//有效字符串书判定
	}
	free(Manager);
	free(Manager->Bottom);
	return true;
}

主函数,测试上述程序:

int main(int argc, char const *argv[])
{
	DataType_t arr[SIZE];
	printf("Input a string:");
	scanf("%s", arr);
	SeqStack_Judge(arr);
	return 0;
}

​ 个人思考:因为申请了堆内存,因此还得有一个释放堆空间的步骤。因此,可以采用同样的思路,利用数组进行设计,不涉及堆空间的操作,更为方便。此处是因为作业要求涉及顺序栈,才多了那么多的步骤。

​ 如有不足之处,敬请批评指正!文章来源地址https://www.toymoban.com/news/detail-857753.html

到了这里,关于利用顺序栈完成的作业题(C语言)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 无线传感器网络作业题

    超星无线传感器网络作业题 选择题 1【多选题】无线传感器网络的主要特点包括( BCD )。 A、节点位置固定 B、无中心 C、自组织 D、多跳路由 2【多选题】无线传感器网络节点包括( AB )。 A、传感器节点 B、汇聚节点 C、管理节点 3【多选题】无线传感器网络中的传感器节点具

    2024年02月11日
    浏览(45)
  • Python作业题——“百钱买百鸡A”

    目录 一、题目描述 1、输入格式 2、输出格式 二、代码解析 1、全部代码 2、代码详解 三、源代码奉上 我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,如果要求鸡翁、鸡母、鸡雏都不为零,问鸡翁、鸡母

    2024年02月07日
    浏览(38)
  • 凃国防老师《高级通信原理》第八章作业题复习

    第八章主要是讲两类信道编码方式,线性分组码以及卷积码。 线性分组码:(循环码也是线性分组码的一种),核心是生成矩阵和校验矩阵 卷积码:核心是编码器、状态转移图、网格图、转移函数、自由距离、好码恶码判断。卷积码采用维比特译码方案,不过必做部分作业

    2024年02月11日
    浏览(40)
  • 第六章 敏捷开发与配置管理-作业题-关于Git的题目

    小图所在的某校信息学院有一位程老师,他对生命游戏特别感兴趣,正巧他看到小图最近在研究生命游戏。程老师想了一些生命游戏的新规则,他想检验一下那些规则是否有效,于是拍了拍小图的肩膀,语重心长地说:“生命游戏能不能成为游戏界的主流,能不能在游戏史上

    2024年02月10日
    浏览(40)
  • 【数据结构】利用顺序栈/链栈完成表达式求值(C语言实现)

    利用顺序栈完成表达式求值(将字符型转换为整型) 程序代码: #include stdio.h #include malloc.h #include stdlib.h #include math.h #define MAXSIZE 100 #define ElemType char #define LEN sizeof ( ElemType ) typedef struct {     ElemType * data;     int top; } SqStack ; void InitStack( SqStack * S ) {     S -data = ( ElemType *)

    2024年02月05日
    浏览(52)
  • Java项目作业~ 通过html+Servlet+MyBatis,完成站点信息的添加功能

    通过html+Servlet+MyBatis,完成站点信息的添加功能。 以下是站点表的建表语句:     RegisterServlet: UserDao: User: MyBatisUtil: UserDao.xml: jdbc.properties: mybatis-config.xml:  web.xml: register.html: RegTest:    点击网址跳转到浏览器:  填写信息如下:  点击提交按钮:  数据库中查

    2024年02月12日
    浏览(32)
  • 利用Jenkins完成Android项目打包

    目前存在的问题 打包操作由开发人员完成,这样开发进度容易被打断。 解决问题的思路 将打包操作交测试/产品/开发人员来完成,主要是测试/开发。 按照以上的思路,那么Jenkins+Gradle的解决方案是比较经济的,实现起来难度不大,下面我们详细介绍一下搭建过程。 服务器的

    2024年02月03日
    浏览(37)
  • 完成一个有趣的Web期末大作业(html、css、javascript、MySQL、Node.js)

    题目:学校老师的要求很开放,要自己做一个感兴趣的网页,要求使用基础的html、css和javascript,后端要使用数据库。 网上都是各种管理系统,看多了觉得没啥意思,要做一个自己感兴趣的网站。近几年沉迷犬夜叉这部动漫,就花了两天的时间创建了一个犬夜叉的网站,对于

    2024年02月04日
    浏览(48)
  • 利用yolov5完成目标检测详细过程

    我所使用的是yolov5-v6.1版本,下载地址: yolov5-6.1代码 解压完成后,在Anaconda Prompt中进入代码所在文件夹,执行以下代码: 它可以帮助我们安装所需要的依赖,并且不会重复安装 初次训练我是用的是官方提供的数据集:Pascal VOC Dataset,下载地址: Pascal VOC Dataset 解压后得到以

    2024年02月04日
    浏览(49)
  • 【AI导师】利用Coding Agent完成AIGC编程

      AI产品的发展确实在过去两年年中取得了显著进展,尤其是在编程领域。一开始,ChatGPT和类似的语言模型主要用于自然语言处理和生成对话。在这个背景下,一些国内的开发者和企业开始将这些技术应用于编程领域,形成了一些 Coding Agent 类型的AI产品。   这些产品的

    2024年02月03日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包