- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构上机报告
数据结构上机报告
班级:通信工程1405 姓名:李笑阳 学号:U201413536
约瑟夫环
需求分析
①.约瑟夫问题的一种描述是:编号为1,2,……,n点的n个人按顺时针方向围坐一个圈,每人持有一个密码。一开始选一个正整数作为报数上限值m,从第一个人开始从顺时针方向自1开始报数,报到m时停止。报到m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始从新从1报数,如此下去,直达所有人出列。?
②.基本要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各人的编号。
③.演示程序提示用户输入其总人数,然后依此输入每个人的数字,程序按照出列的顺序输出各人的编号。
测试数据: m的初始值为20;n=7,7个人的密码依次是3,1,7,2,4,8,4,首先m的值为6(正确的出列顺序为6,1,4,7,2,3,5)
设计概要
①循环链表的结点类型定义
typedef struct LNode
②.创建链表模块
LinkList creatList_L(int n)
③.删除链表并释放空间模块
void ListDelete_L(LinkList L,int key,int n)
④.主函数模块(约瑟夫环的实现)
Void main()
具体代码实现
#includestdio.h
#includemalloc.h
//定义结构体
typedef struct LNode
{
int password,num;
struct LNode *next;
}LNode,*LinkList;
//创建链表
LinkList creatList_L(int n)
{
LinkList p,head,q;
int i=1,key;
head=(LinkList)malloc(sizeof(LNode));
p=head;
for(i=1;i=n;i++) //进入循环赋值
{
scanf(%d,key);
q=p;
p=(LinkList)malloc(sizeof(LNode));
p-num=i;p-password=key;
q-next=p;
}
p-next=head-next;
free(head); //
//现在的p节点是列表的尾节点 把尾节点的下一个指向头结点
//也就是形成了一个环
head=p-next;
return (head);
}
//输出并删除列表
void ListDelete_L(LinkList L,int key,int n)
{
LinkList p,s;
int j=1;
while(n0)
{
p=L;
//key是人数上限M==key 现在开始循环叫数 叫到M的输出
//并从循环链表中删除
for(j=1;jkey;j++)
{s=p;p=p-next;}
printf(%2d %5d\n,p-num,p-password);
key=p-password;
//s是p的上一个节点,现在把s的下一个节点指向p的下一个
s-next=p-next;
L=p-next;
//释放p节点
free(p);
//链表总数减一,一直到n==0时退出while循环
n--;
}
}
void main()
{
LinkList s;
int n,m;
printf(请输入总人数N和上限数M:);
scanf(%d%d,n,m);
printf(请输入%d个人的密码:,n);
s=creatList_L(n); //调用创建列表
printf(序号 密码\n);
ListDelete_L(s,m,n); //调用输出并删除列表
}
运行分析
①.运行结果
②.复杂度的分析
时间复杂度为O(n),空间复杂度为O(n)
5.实验总结
这个算法中的主函数只完成输入输出,其他都是通过调用完成。通过这个程序我对循环链表的构建和使用更加熟悉。
哈夫曼编码
需求分析
从一文件中读取字符,分别统计该文件中英文字符ABCD…等26个数字的出现概率,并以各自的概率为权值,为这26个字符建立一颗哈夫曼树,并对每个字符进行哈夫曼编码和哈夫曼解码。
设计概要
①.从文件中读取字符模块
char *get_file_contents(const char *filename)
②.节点类型定义模块
typedef struct HuffNode
③.编码类型定义模块
typedef struct HuffCode
④.哈夫曼编码的初始化
void Init(HTCode hc[], int n)
⑤.哈夫曼树的构建模块
void Select(HTNode ht[], int k, int *s1, int *s2)
⑥.哈夫曼编码的求解模块
void
您可能关注的文档
- 数据结构 第七章-图.ppt
- 数据结构 第十章-排序.ppt
- 数据结构(C语言)实验报告_飞机订票系统.doc
- 数据结构(C语言版) 第6章 树.ppt
- 数据结构(C语言版)第10章 内部排序.ppt
- 数据结构(第4版)习题及实验参考答案 数据结构复习资料完整版(c语言版).doc
- 数据结构(算法)总结.doc
- 数据结构(金远平).ppt
- 数据结构---栈和队列.doc
- 数据结构--3(栈).ppt
- 吉林省丙烯酰胺项目投资计划书参考范文 .pdf
- 医学进修自我鉴定范文(真题5篇) .pdf
- 危险废物管理培训试卷 .pdf
- 医院审计科工作岗位职责要求(4篇) .pdf
- 2024-2025学年小学劳动一年级下册人民版《劳动》(2022)教学设计合集.docx
- 2024-2025学年初中地理六年级下册沪教版教学设计合集.docx
- 2024-2025学年初中化学九年级上册(2024)鲁教版(2024)教学设计合集.docx
- 2024-2025学年初中英语九年级下册上海新世纪版教学设计合集.docx
- 2024-2025学年中职数学基础模块 下册北师大版(2021)教学设计合集.docx
- 历史-2025届新高三九月学情摸底考试暨开学联考(新课标卷)试题和答案.pdf
文档评论(0)