《数据结构实验大作业.pdf》由会员分享,可在线阅读,更多相关《数据结构实验大作业.pdf(3页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构实验大作业数据结构实验大作业大作业要求:大作业要求:请大家在暑假期间将数据结构实验大作业完成后,将代码粘贴在报告中,上传到网络学堂,作业在同一个班内不允许抄袭,截至日期为 9 月 8 日。必须独立完成。题目:题目:一、一、JosephuJosephu 问题问题Josephu 问题为:设编号为 1,2,n 的 n 个人围坐一圈,约定编号为 k(1=k=n)的人从 1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。提示:用一个不带头结点的循环链表来处理 Josephu 问题:先构成一个有
2、n 个结点的单循环链表,然后由 k 结点起从 1 开始计数,计到 m 时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从 1 开始计数,直到最后一个结点从链表中删除算法结束。示意图:源代码:#includestruct Josephu_nodeint node_nu;struct Josephu_node*pre;struct Josephu_node*next;struct Josephu_node*Josephu_node_add(struct Josephu_node*head,int nu)struct Josephu_node*newnode;if(head=NULL)he
3、ad=(struct Josephu_node*)malloc(sizeof(struct Josephu_node);head-node_nu=1;head-pre=head;head-next=head;printf(Creat Head:%d,head-node_nu);elsenewnode=(struct Josephu_node*)malloc(sizeof(structJosephu_node);newnode-node_nu=nu;newnode-pre=head-pre;newnode-next=head;head-pre-next=newnode;head-pre=newn
4、ode;printf(,%d,head-pre-node_nu);return head;struct Josephu_node*Joseph_node_del(struct Josephu_node*del_node)struct Joseph_node*del_node_next=del_node-next;if(del_node!=NULL)if(del_node-next!=del_node)del_node-pre-next=del_node-next;del_node-next-pre=del_node-pre;elsedel_node_next=NULL;printf(%d,de
5、l_node-node_nu);free(del_node);del_node=NULL;return del_node_next;return NULL;int main(int argc,char*argv)struct Josephu_node*head=NULL;struct Josephu_node*node_tmp;int nu_people=0;int out_nu=0;int i;printf(Please input the nu of the People:);scanf(%d,&nu_people);printf(Please input the rule out nu:);scanf(%d,&out_nu);for(i=0;ipre)if(i=out_nu-1)node_tmp=Joseph_node_del(node_tmp);i=0;continue;i+;node_tmp=node_tmp-next;node_tmp=Joseph_node_del(node_tmp);printf(n);return 0;二、稀疏矩阵的操作二、稀疏矩阵的操作基本功能要求:稀疏矩阵采用三元组表示,求两个具有相同行列数的稀疏矩阵 A 和 B 的相加矩阵 C,并输出 C,求出 A 的转置矩阵 D,输出 D。
限制150内