目录

1.用无头结点的循环链表实现约瑟夫环问题

头文件:

功能函数:

主函数:

终端输出:

2.顺序栈实现进制转换问题

头文件:

功能函数:

主函数:

终端输出:


1.用无头结点的循环链表实现约瑟夫环问题

头文件:

#ifndef _ZY1_H
#define _ZY1_Htypedef int datatype;
typedef struct Node
{union{datatype data;int len;};struct Node *next;
}joseph;
//创建
joseph *ring_creat();
//判空
int empty(joseph *l);
//删除头结点
joseph *kill(joseph *l);
//插入
int insert(joseph *l,datatype e);
//约瑟夫环
int ring(joseph *h,int n,int m);
//删头后遍历
void show(joseph *h);
#endif

功能函数:

#include<stdio.h>
#include<stdlib.h>
#include"zy1.h"joseph *ring_creat()
{joseph *l=(joseph*)malloc(sizeof(joseph));if(NULL==l){printf("创建失败\n");return NULL;}l->len=0;l->next=l;printf("创建成功\n");return l;
}
int empty(joseph *l)
{return l->next==l?1:0;
}
joseph *kill(joseph *l)
{if(NULL==l){free(l);l=NULL;return NULL;}joseph *p=l;while(p->next!=l){p=p->next;}p->next=l->next;free(l);l=NULL;printf("删除成功\n");return p->next;
}
int insert(joseph *l,datatype e)
{if(NULL==l){printf("插入失败\n");return -1;}joseph *p=(joseph*)malloc(sizeof(joseph));p->data=e;p->next=NULL;if(NULL==p){printf("申请失败\n");return -2;}joseph *q=l;while(q->next!=l){q=q->next;}p->next=l;q->next=p;l->len++;printf("插入成功\n");return 0;
}
int ring(joseph *l,int n,int m)
{joseph *p=l;printf("约瑟夫环实现:");for(int j=0;j<n;j++){for(int i=0;i<m-2;i++){p=p->next;}joseph *q=p->next;printf("%d\t",q->data);p->next=q->next;p=p->next;free(q);q=NULL;}     printf("\n");
}
void show(joseph *h)
{if(h==NULL){printf("遍历失败\n");return;}printf("删除头结点后:");joseph *q=h;do{printf("%d\t",q->data);q=q->next;}while(q!=h);printf("\n");
}

主函数:

#include"zy1.h"
#include <stdio.h>
int main(int argc, const char *argv[])
{joseph *l= ring_creat();insert(l,1);  insert(l,2);    insert(l,3);    insert(l,4);    insert(l,5);    insert(l,6);    insert(l,7);    insert(l,8);    joseph *h=kill(l);show(h);ring(h,8,4);return 0;
}

终端输出:

2.顺序栈实现进制转换问题

头文件:

#ifndef _ZY2_H
#define _ZY2_H
#define M 100
typedef int datatype;
typedef struct
{datatype data[M];int top;
}trans;
//创建栈
trans *creat();
//判空
int empty(trans *s);
//判满
int full(trans *s);
//入栈
int push(trans *s,datatype e);
//出栈
int pop(trans *s);
//遍历
void show(trans *s);
//二进制转换
int transform_2(trans *s,int n);
//八进制转换
int transform_8(trans *s,int n);
//十六进制转换
int transform_16(trans *s,int n);
#endif

功能函数:

#include<stdio.h>
#include<stdlib.h>
#include"zy2.h"trans *creat()
{trans *s=(trans*)malloc(sizeof(trans));if(NULL==s){printf("创建失败\n");return NULL;}s->top=-1;printf("创建成功\n");return s;
}
int empty(trans *s)
{return s->top==-1?1:0;
}
int full(trans *s)
{return s->top==M-1?1:0;
}
int push(trans *s,datatype e)
{if(NULL==s||full(s)){printf("入栈失败\n");return -1;}s->top++;s->data[s->top]=e;printf("入栈成功\n");return 0;
}
int pop(trans *s)
{if(NULL==s||empty(s)){printf("出栈失败\n");return -1;}printf("%d出栈成功\n",s->data[s->top]);s->top--;return 0;
}void show(trans *s)
{if(NULL==s||empty(s)){return ;}printf("当前栈中从栈顶到栈底元素分别是:");for(int i=s->top;i>=0;i--){printf("%d\t",s->data[i]);}printf("\n");
}
int transform_2(trans *s,int n)
{if(NULL==s){printf("转换失败\n");return -1;}while(n/2!=0){push(s,n%2);n=n/2;}push(s,n);printf("输出二进制:");show(s);s->top=-1;return 0;
}
int transform_8(trans *s,int n)
{if(NULL==s){printf("转换失败\n");return -1;}while(n/8!=0){push(s,n%8);n=n/8;}push(s,n);printf("输出八进制:");show(s);s->top=-1;return 0;
}
int transform_16(trans *s,int n)
{if(NULL==s){printf("转换失败\n");return -1;}while(n/16!=0){push(s,n%16);n=n/16;}push(s,n);printf("输出十六进制:");for(int i=s->top;i>=0;i--){switch(s->data[i]){case 10:printf("A");break;case 11:printf("B");break;case 12:printf("C");break;case 13:printf("D");break;case 14:printf("E");break;case 15:printf("F");break;default:printf("%d",s->data[i]);}}printf("\n");s->top=-1;return 0;
}

主函数:

#include"zy2.h"
#include <stdio.h>
int main(int argc, const char *argv[])
{int n;trans *s=creat();printf("输入一个十进制数:");scanf("%d",&n);transform_2(s,n);show(s);transform_8(s,n);show(s);transform_16(s,n);return 0;
}

终端输出:

华清远见上海中心22071班 8.25作业相关推荐

  1. 华清远见上海中心22071班 9.2作业

    1.用父子进程拷贝一张图片,其中子进程先拷贝后半部分,父进程后拷贝前半部分.要求用文件IO实现. 函数: #include <stdio.h> #include <fcntl.h&g ...

  2. 华清远见上海中心22071班--11.19作业

    题目:实现开发板点灯操作 程序要求: 1)分部实现注册字符设备驱动 2)自动创建设备节点 3)通过结构体对led灯地址进行映射 4)次设备号完成私有数据传参 5)在open函数中获取到次设备号,用私有 ...

  3. 华清远见上海中心22071班 9.7作业

    目录 1.创建两个线程 A.B,要求A线程读取文件中的数据,B线程将读取到的数据打印到终端上,类似shell命令cat. 2.编写一个程序,开启3个线程,这3个线程的ID分别为A.B.C,每个线程将自 ...

  4. 华清远见上海中心22071班 9.30作业

    电子词典: 登录注册功能,不能重复登录,重复注册 单词查询功能 历史记录功能,存储单词,意思,以及查询时间 基于TCP,支持多客户端连接 采用数据库保存用户信息与历史记录 将dict.txt的数据导入 ...

  5. 华清远见上海中心22071班 8.24作业

    1.单向链表按位置修改 void list_update_pos(linklist *L,int pos,datatype e) {if(NULL==L||list_empty(L)||pos< ...

  6. 华清远见上海中心22071班 9.21作业

    1.完成数据库的插入.删除.修改,插入选择全字段插入.删除.修改选择用id的方式 代码: #include <stdio.h> #include <sqlite3.h> #in ...

  7. 华清远见上海中心22071班 9.19作业

    目录 1.并发服务器 1)多进程并发服务器 2)多线程并发服务器 2.域套接字 1.流式域套接字(TCP) 1.1服务器 1.2客户端 2.报式套接字(UDP) 2.1服务器 2.2客户端 1.并发服 ...

  8. 华清远见上海中心22071班--11.24作业

    题目:应用层采取ioctl命令控制,驱动代码用GPIO子系统,实现开发板6盏灯的循环亮灭 头文件程序: #ifndef __LED_H__ #define __LED_H__typedef enum{ ...

  9. 华清远见上海中心22071班--11.28作业

    题目:三个按键实现按键中断,key1>>led1,key2>>led2, key3>>led3.按键按一下灯亮,再按一下灯灭 . #include <linu ...

最新文章

  1. java io使用哪些设计模式_JAVA IO中的设计模式
  2. matlab怎么求矩阵的范数
  3. 【最后一天倒计时】你离¥399网易黑猪肉券就差一步
  4. js判断fck编辑器内容是否为空并获得焦点
  5. I/O复用函数的使用——poll
  6. 三年了总觉的还是该写点什么
  7. leetcode29. 两数相除(位运算)
  8. 两岸三地在线编程学习网站大全
  9. 卓越领导者的智慧(精华版)
  10. python嵌套字典的建立_python – 从Pandas DataFrame创建复杂的嵌套字典
  11. portlet_Portlet Servlet JSP
  12. ZCANPRO-CAN/CANFD收发软件:安装及使用
  13. 并查集算法最全最详细讲解
  14. W10电脑U盘插入电脑不显示盘符但是“安全删除硬件并弹出媒体”中却有该U盘
  15. 自动化测试工具 Java等
  16. 大数相乘 - 浮点数
  17. 错误:未将对象引用设置到对象的实例
  18. arch linux界面,ArchLinux图形界面安装
  19. 这是一个浮躁的时代(程序员)
  20. 使用J-FLASH烧写stm32F407

热门文章

  1. 2022 小西瓜API v4.0完整运营版源码
  2. Ubuntu14.04台式机小米wifi
  3. Python 绘图还在用 Matplotlib?发现一款手绘可视化神器!
  4. Ubuntu 10.04 安装记录 [Samsung R700]
  5. 关于SQL92与SQL99语法的区别与PK
  6. UE4仿真子弹 防止穿透及时间不匹配
  7. c语言判断是文件还是文件夹
  8. android系统服务---大宝点
  9. Git分支--合并分支(冲突合并)
  10. 在i3 Cpu上允许64位系统