利用顺序栈输出对应的二进制数,找迷宫出口详解(数据结构作业04)

目录

利用顺序栈输出对应的二进制数

代码: 

运行结果: 

找迷宫出口

代码: 

图解: 

运行结果:


利用顺序栈输出对应的二进制数

键盘输入一个十进制正整数89,用C语言设计一个算法,利用顺序栈输出对应的二进制数。

代码: 

#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 100
typedef int ElemType;//定义顺序栈结构
//里面有一个数组和一个栈指针
typedef struct 
{	ElemType data[MAXSIZE];int top;				//栈指针
} SqStack;					//顺序栈类型// 初始化栈
void InitStack(SqStack *S) {S->top = -1;  // 栈顶初始指向-1,表示栈为空
}// 入栈
void Push(SqStack *S, int value) {//栈已满,直接返回if (S -> top == MAXSIZE - 1) {printf("栈已满!\n");return;}//栈未满,让栈指针加一并且将值放在栈顶指针处S -> top++;S -> data[S -> top] = value;
}// 取栈顶元素并且出栈
int Pop(SqStack *S) {//栈为空,直接返回falseif (S->top == -1) {printf("栈为空!\n");return false;}//让栈顶指针减一并且返回栈顶指针指向的值int e = S -> data[S -> top];S -> top--;return e;
}// 判断栈是否为空
bool IsEmpty(SqStack *S) {if(S -> top == -1)return true;else return false;
}// 主函数
int main() {int num = 89;  //输入的十进制数89//初始化栈SqStack binStack;InitStack(&binStack);// 将十进制数转换为二进制,并压入栈中do {Push(&binStack, num % 2);  // 将该数除以二的余数入栈num /= 2;  // 再让该数变为它除以二之后的数} while (num > 0);// 输出二进制数printf("89的二进制数为: ");//只要栈不为空就输出栈顶元素while (!IsEmpty(&binStack)) {int digit = Pop(&binStack);printf("%d", digit);}printf("\n");return 0;
}

运行结果: 

找迷宫出口

有一个迷宫如下图所示:

利用顺序栈求一个从指定入口(1,1)到出口(4,4)的路径。

代码: 

#include <stdio.h>
#include <stdlib.h>typedef struct {int i,j;int di;//i为行,j为列号,di是走到下一相邻方块的方位号
} box;//表示这是一个方块类型// 定义顺序栈结构
typedef struct {box data[50];int top;//栈顶指针
} stack;// 初始化栈
void InitStack(stack * &S) {S = (stack *)malloc(sizeof(stack));S -> top = -1;  // 栈顶初始指向-1,表示栈为空
}// 入栈
bool push(stack * &s,box b) {s -> top++;s -> data[s -> top] = b;return true;
}// 出栈
bool pop(stack * &s,box &b) {b = s -> data[s -> top];s -> top--;//用b存放栈顶元素,栈顶指针减一return true;
}//取栈顶元素
bool gettop(stack *s,box &b) {b = s -> data[s -> top];return true;
}bool isempty(stack *s) {if(s -> top == -1)return true;else return false;
}const int m = 4,n = 4;
//这表示这是一个4乘4大小的迷宫。
int maze[m + 2][n + 2] = {//要给迷宫加上一道围墙,所以行和列都要加2//墙初始化为1,没墙初始化为0{1, 1, 1, 1, 1, 1},{1, 0, 0, 0, 1, 1},{1, 0, 1, 0, 0, 1},{1, 0, 0, 0, 1, 1},{1, 1, 0, 0, 0, 1},{1, 1, 1, 1, 1, 1}};bool mgpath(int xi,int yi,int xe,int ye) {//求解路径为xiyi到xeyebox path[50],e;int i,j,di,i1,j1,k;bool find;stack *s;InitStack(s); //初始化栈e.i = xi,e.j = yi,e.di = -1; //设置e为入口push(s,e); //e入栈maze[xi][yi] = -1; //将迷宫入口设置为-1while(!isempty(s)) {//只要栈不为空就进行如下循环gettop(s,e); //得到栈顶元素i = e.i,j = e.j,di = e.di;if(i == xe && j == ye) {//找到出口printf("找到了一条走到终点的路径为:\n");k = 0;while(!isempty(s)) {pop(s,e);path[k++] = e;//将e添加到path数组}while(k > 0) {printf("\t(%d,%d)",path[k - 1].i,path[k - 1].j);if((k + 1) % 5 == 0)printf("\n");k--;//每5行换一行}printf("\n");return true;}find = false;while(di < 4 && !find) {//di表示4个方向,向上为0//向右为1,向下位为2,向左为3di++;//每次让di+1表示换一个方向switch(di) {case 0:i1 = i - 1,j1 = j    ;break;case 1:i1 = i    ,j1 = j + 1;break;case 2:i1 = i + 1,j1 = j    ;break;case 3:i1 = i    ,j1 = j - 1;break;//上右下左4个方向}if(maze[i1][j1] == 0)find = true;//为0表示可以走}if(find) {s -> data[s -> top].di = di;//修改栈顶di值e.i = i1,e.j = j1,e.di = -1;push(s,e); //相邻可走方块入栈maze[i1][j1] = -1;//将走过的位置设置为-1,防止重复走}else{pop(s,e);maze[e.i][e.j] = 0;//每找到路径,就回溯,出栈并且使走过的位置重新变为0}}return false;//表示没有路径可以走
}int main() {if(!mgpath(1,1,4,4))//传入出口位置和出口位置printf("该迷宫问题没有解");return 0;
}

图解: 

运行结果:

 

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

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

相关文章

MambaAD 实验部分讲解

4 实验 4.1 设置&#xff1a;数据集、指标和细节 数据集&#xff08;6个&#xff09; 1.MVTec-AD&#xff1a; 包含5种类型的纹理和10种类型的对象&#xff0c;总共5,354张高分辨率图像。 实验&#xff1a; 3,629张正常图像被指定为训练。 剩下的 1,725 张图像被保留用于测试…

网络基础擅长组建乐队

让我们荡起双桨 来说说网络吧 现有计算机要进行协作&#xff0c;网络的产生是必然的 局域网&#xff1a;计算机数量更多了, 通过交换机和路由器连接在一起 广域网&#xff1a;将远隔千里的计算机都连在一起 交换机路由器等设备就应运而生 计算机是人的工具&#xff0c;人要协…

美国游戏发展趋势

美国拥有一些最大、最具影响力的游戏开发工作室&#xff0c;是游戏行业的全球领导者。凭借丰富地创新历史&#xff0c;美国游戏开发不断发展&#xff0c;受到尖端技术、消费者偏好和市场动态的影响。已经出现了几个趋势&#xff0c;这些趋势定义了该国游戏发展的方向&#xff0…

node高版本报错: digital envelope routines::unsupported

node高版本报错&#xff1a; digital envelope routines::unsupported 解决方案&#xff1a; package.json中&#xff0c;启动命令前加上&#xff1a; set NODE_OPTIONS--openssl-legacy-provider &&

WPF 手撸插件 八 操作数据库一

1、本文将使用SqlSugar创建Sqlite数据库&#xff0c;进行入门的增删改查等操作。擦&#xff0c;咋写着写着凌乱起来了。 SqlSugar官方文档&#xff1a;简单示例&#xff0c;1分钟入门 - SqlSugar 5x - .NET果糖网 2、环境SqlSugar V5.0版本需要.Net Framework 4.6 &#xff0…

Qt源码-Qt多媒体音频框架

Qt 多媒体音频框架 一、概述二、音频设计1. ALSA 基础2. Qt 音频类1. 接口实现2. alsa 插件实现 一、概述 环境详细Qt版本Qt 5.15操作系统Deepin v23代码工具Visual Code源码https://github.com/qt/qtmultimedia/tree/5.15 这里记录一下在Linux下Qt 的 Qt Multimedia 模块的设…

Windows 11 version 24H2 LTSC 2024 中文版、英文版 (x64、ARM64) 下载 (updated Oct 2024)

Windows 11 version 24H2 & LTSC 2024 中文版、英文版 (x64、ARM64) 下载 (updated Oct 2024) Windows 11, version 24H2&#xff0c;企业版 arm64 x64 请访问原文链接&#xff1a;https://sysin.org/blog/windows-11/ 查看最新版。原创作品&#xff0c;转载请保留出处。…

20年408数据结构

第一题&#xff1a; 解析&#xff1a;这种题可以先画个草图分析一下&#xff0c;一下就看出来了。 这里的m(7,2)对应的是这图里的m(2,7),第一列存1个元素&#xff0c;第二列存2个元素&#xff0c;第三列存3个元素&#xff0c;第四列存4个元素&#xff0c;第五列存5个元素&#…

C嘎嘎入门篇:类和对象番外(时间类)

前文&#xff1a; 小编在前文讲述了类和对象的一部分内容&#xff0c;其中小编讲述过运算符重载这个概念以及一个时间类&#xff0c;当时小编讲的没有那么细致&#xff0c;下面小编将会讲述时间类来帮助各位读者朋友更好的去理解运算符重载&#xff0c;那么&#xff0c;代码时刻…

江西精装世家新型环保材料有限公司:环保家装理念已深入人心!

在现代社会&#xff0c;随着环保意识的觉醒&#xff0c;越来越多的人开始重视家居环境的健康与可持续性。江西精装世家新型环保材料有限公司&#xff0c;作为家装行业的佼佼者&#xff0c;正是这一绿色潮流的引领者。该公司将环保理念深深融入家装实践之中&#xff0c;为消费者…

奥斯卡影帝阿尔帕西诺自传出版:儿子和女友为他提供了写自传的灵感

女友努尔阿尔法拉&#xff08;Noor Alfallah&#xff09;何许人也&#xff1f; 许多人在听到阿尔帕西诺将在80岁出头再次成为父亲的消息时感到震惊&#xff0c;但一年后&#xff0c;帕西诺已经证明他喜欢再次成为他和努尔阿夫拉的女儿罗曼的父亲&#xff1b;甚至激发了一个即将…

数字电表读数检测图像数据集,数据集总共3300左右张图片,标注为voc格式

数字电表读数检测图像数据集&#xff0c;数据集总共3300左右张图片&#xff0c;标注为voc格式 数字电表读数检测数据集 (Digital Meter Reading Detection Dataset) 数据集概述 该数据集是一个专门用于训练和评估数字电表读数检测模型的数据集。数据集包含约3300张图像&#…

高速机器人的点动与直线运动

工业机器人中的点动和直线运动非常之重要&#xff0c;接下来说一下他们的实现过程。 点动&#xff1a; 点动包括两个部分&#xff0c;第一个点动是每一个关节电机的点动&#xff0c;第二个是机器末端向xyz的三个方向进行点动处理。 第一个点动是非常简单的&#xff0c;即把对…

购物清单 | 双十一加购率最高好物合集,数码购物车必备!

​双十一来临&#xff0c;小伙伴们肯定已经被种草了很多很多清单&#xff0c;开始买买买了&#xff01;但是&#xff0c;作为一个数码博主&#xff0c;怎么能少了数码产品&#xff01;今天我给大家准备了一份数码人专属的购物清单&#xff0c;快来看看吧&#xff01; 运动耳机…

Android阶段学习思维导图

前言 记录下自己做的一个对Android原生应用层的思维导图&#xff0c;方便个人记忆扩展&#xff1b;这里只露出二级标题。 后语 虽然有些内容只是初步了解&#xff0c;但还是记录了下来&#xff1b;算是对过去一段学习的告别。

005集—— 用户交互之CAD窗口选择图元实体(CAD—C#二次开发入门)

如下图&#xff1a;根据提示选择若干图形要素&#xff0c;空格或右键结束选择&#xff0c;返回图元的objectid&#xff0c;以便进一步操作图元实体。 代码如下&#xff1a; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.Aut…

wxPython中wx.ListCtrl用法(样式和事件)

wx.ListCtrl是一个列表组件&#xff0c;可以以列表视图&#xff08;list view&#xff09;、报表视图&#xff08;report view&#xff09;、图标视图&#xff08;icon view&#xff09;和小图标视图&#xff08;small icon view&#xff09;等多种模式显示列表。 组件样式 wx…

【英语】5. 作文的高级表达

文章目录 前言一、作用二、主干内容三、使用步骤总结参考文献 前言 高中时总结的[1]&#xff0c;现在接着用 一、作用 在各种考试的作文中使用&#xff0c;减少过于直白、没有 “文采” 的表达 二、主干内容 file:///C/Users/[username]/Desktop/Engs.txt[2023/6/15 23:47:4…

系统架构设计师论文《论企业应用系统的数据持久层架构设计》精选试读

论文真题 数据持久层&#xff08;Data Persistence Layer&#xff09;通常位于企业应用系统的业务逻辑层和数据源层之间&#xff0c;为整个项目提供一个高层、统一、安全、并发的数据持久机制&#xff0c;完成对各种数据进行持久化的编程工作&#xff0c;并为系统业务逻辑层提…