数据结构上机报告.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

文档精品 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6203200221000001

1亿VIP精品文档

相关文档