当前位置: 首页 > news >正文

day18homework

使用循环链表完成约瑟夫环问题

1.c

#include "1.h"
//创建循环链表
NodePtr list_create()
{//在堆区申请一个头结点NodePtr L = (NodePtr)malloc(sizeof(Node));if (NULL == L){printf("创建失败\n");return NULL;}//初始化L->len = 0;L->next = L; //头结点指针域指向自己printf("创建成功\n");return L;
}
//链表判空
int list_empty(NodePtr L)
{return L->next == L;
}
//链表申请空间封装节点
NodePtr apply_node(datatype e)
{//堆区申请一个节点的空间NodePtr p = (NodePtr)malloc(sizeof(Node));if (NULL == p){printf("申请失败\n");return NULL;}//给节点赋值p->data = e;p->next = NULL;return p;
}
//按位置进行查找
NodePtr list_search_pos(NodePtr L, int pos)
{//判断逻辑if (NULL == L || pos < 0 || pos > L->len){printf("查找失败\n");return NULL;}//查找逻辑NodePtr q = L;for (int i = 0; i < pos; i++){q = q->next;}return q;
}
//链表尾插
int list_insert_tail(NodePtr L, datatype e)
{//判断逻辑if (NULL == L){printf("插入失败\n");return -1;}//找到最后一个节点NodePtr q = list_search_pos(L, L->len);//封装节点NodePtr p = apply_node(e);if (NULL == p){return -1;}//插入逻辑p->next = q->next;q->next = p;//表的变化L->len++;printf("插入成功\n");return 0;
}
//链表遍历
int list_show(NodePtr L)
{//判断逻辑if (NULL == L || list_empty(L)){printf("遍历失败\n");return -1;}//遍历逻辑NodePtr q = L->next;while (q != L){printf("%d\t", q->data);q = q->next; //继续访问下一个}printf("\n");
}
//链表的头删
int list_delete_head(NodePtr L)
{//判断逻辑if (NULL == L || list_empty(L)){printf("删除失败\n");return -1;}//头删逻辑NodePtr p = L->next; //标记L->next = p->next;   //孤立free(p);             //删除p = NULL;//表长变化L->len--;printf("删除成功\n");return 0;
}
//链表销毁
void list_destroy(NodePtr L)
{//判断逻辑if (NULL == L){printf("释放失败\n");return;}//删除节点while (!list_empty(L)){list_delete_head(L);}//释放头结点free(L);L = NULL;printf("销毁成功\n");
}
void create(NodePtr L, datatype n)
{for (int i = 1; i <= n; i++){list_insert_tail(L, i);}
}
// 约瑟夫环问题求解
void josephus(NodePtr L, int m)
{NodePtr p = L->next; // 从第一个节点开始while (p->len > 1){for (int i = 1; i < m - 1; i++){p = p->next;}list_delete_head(p);}printf("最后活着的是: %d\n", p->data);
}

2.c

#include "1.h"
int main()
{NodePtr L = list_create();if (NULL == L){return -1;}int n, m;printf("请输入总人数n和报数间隔m");printf("例如(m=2,从一号开始则三号死)");scanf("%d %d", &n,&m);create(L, n);list_show(L);josephus(L, m);//调用释放函数list_destroy(L);L = NULL;return 0;
}

1.h

#ifndef LINKLIST_H
#define LINKLIST_H
#include <myhead.h>
//定义数据类型
typedef int datatype;//定义结点类型
typedef struct Node
{union{int len;       //头结点数据域datatype data; //普通结点数据域};struct Node *next; //指针域
} Node, *NodePtr;
//创建循环链表
NodePtr list_create();
//链表判空
int list_empty(NodePtr L);
//链表申请空间封装节点
NodePtr apply_node(datatype e);
//按位置进行查找
NodePtr list_search_pos(NodePtr L, int pos);
//链表尾插
int list_insert_tail(NodePtr L, datatype e);
//链表遍历
int list_show(NodePtr L);
//链表的头删
int list_delete_head(NodePtr L);
//链表销毁
void list_destroy(NodePtr L);
void create(NodePtr L, datatype n);
// 约瑟夫环问题求解
void josephus(NodePtr L, int m);
#endif

使用栈,完成进制转换

输入:一个整数,进制数

输出:该数的对应的进制数

1.c

#include"1.h"
int main() {int number, base;printf("请输入一个整数和进制数(用空格隔开):");scanf("%d %d", &number, &base);printf("转换后的进制数为:");convertToBase(number, base);return 0;
}

2.c

#include"1.h"
void push(Stack *stack, int value)
{if (stack->top == MAX_SIZE - 1){printf("栈已满,无法插入新元素");return;}stack->data[++stack->top] = value;
}int pop(Stack *stack)
{if (stack->top == -1){printf("栈为空,无法弹出元素");return -1;}return stack->data[stack->top--];
}void convertToBase(int number, int base)
{Stack stack;stack.top = -1;while (number > 0){push(&stack, number % base);number /= base;}while (stack.top != -1){int digit = pop(&stack);if (digit < 10){printf("%d", digit);}else{printf("%c", 'A' + digit - 10);}}printf("\n");
}

1.h

#ifndef SEQSTACK_H
#define SEQSTACK_H
#include<myhead.h>
#define MAX_SIZE 100
typedef struct {int data[MAX_SIZE];int top;
} Stack;
void push(Stack *stack, int value);
int pop(Stack *stack);
void convertToBase(int number, int base);#endif

相关文章:

  • SpringBoot3:轻松使用Jasypt实现配置文件信息加密
  • DDoS 攻击下的教育网站防护策略
  • ansible基础讲解和加密文件讲解
  • 机器学习数学基础(2)--最大似然函数
  • 免杀笔记 -->API的整理Shellcode加密(过DeFender)
  • 初学MySQl简单sql语句(1)
  • google、windows自带语音识别中英文等实时字幕使用
  • 跨境电商独立站:Shopify/Wordpress/店匠选哪个?
  • Linux常用命令整理
  • 苹果笔记本电脑如何优化系统 苹果电脑系统优化软件哪个好 cleanmymac x怎么用
  • React如何用一个变量接收所有axios接口内的数据渲染dom
  • chrome 插件:content-script 部分逻辑在页面无法生效,可考虑插入 script 到页面上
  • [C++][STL源码剖析] 详解AVL树的实现
  • 策略模式(Strategy Pattern)
  • Zilliz 推出 Spark Connector:简化非结构化数据处理流程
  • [译]前端离线指南(上)
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 4个实用的微服务测试策略
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Nodejs和JavaWeb协助开发
  • PaddlePaddle-GitHub的正确打开姿势
  • react 代码优化(一) ——事件处理
  • Sass 快速入门教程
  • win10下安装mysql5.7
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 和 || 运算
  • 前端存储 - localStorage
  • 如何实现 font-size 的响应式
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • ionic异常记录
  • Linux权限管理(week1_day5)--技术流ken
  • #define用法
  • (12)Hive调优——count distinct去重优化
  • (7)svelte 教程: Props(属性)
  • (Charles)如何抓取手机http的报文
  • (LeetCode C++)盛最多水的容器
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二十三)Flask之高频面试点
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (十六)一篇文章学会Java的常用API
  • (转) Android中ViewStub组件使用
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net 7 上传文件踩坑
  • .net core 的缓存方案
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .net访问oracle数据库性能问题