开发工具:
文件大小: 5kb
下载次数: 0
上传时间: 2012-11-06
详细说明:
采用单向循环链表实现约瑟夫环。 请按以下要求编程实现: ① 从键盘输入整数m,通过create函数生成一个具有m个结点的单向环表。环表中的结点编号依次为1,2,……,m。 ② 从键盘输入整数s(1<=s<=m)和n,从环表的第s个结点开始计数为1,当计数到第n个结点时,输出该第n结点对应的编号,将该结点从环表中消除,从输出结点的下一个结点开始重新计数到n,这样,不断进行计数,不断进行输出,直到输出了这个环表的全部结点为止。 例如,m=10,s=3,n=4。则输出序列为:6,10,4,9,5,2,1,3,8,7。 作者:lanshuxin 发表时间:2005-10-24 23:52:00 第1楼 #include"stdio.h" struct node {int n; struct node *next; } main() {int i,j,b=0,N,m,s; struct node *p,*head,*q; printf("input three numbers:\n"); scanf("%d %d %d",&m,&am p;N,&s); head=(struct node*)malloc(sizeof(struct node)); head->n=s; head->next=head; for(i=m;i>0;i--) {p=(struct node*)malloc(sizeof(struct node)); p->next=head->next; p->n=i; head->next=p; } while(p->next!=head) p=p->next; p->next=head->next; for(i=1;inext; for(i=0;inext; q=p->next; p->next=q->next; printf("M",q->n); free(q); } } 作者:smf 发表时间:2005-10-25 18:10:00 第2楼 #include"iostream.h" #include"malloc.h" #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define NULL 0 #define OK 1 typedef struct LNode { int num; int data; struct LNode *next; }LNode,*LinkList; LinkList p,q; int i,j,m; void CreateList_L(LinkList &L,int n) { //逆位序输入n 个元素的值,建立一个带头结点的循环单链表L L=(LinkList)malloc(sizeof(LNode));//创建新结点 L->next=NULL; cout<<"请输入每个元素分配的密码:" <num=i; cout<>p->data; q->next=p; p->next=L->next; q=p; } }//CreateList_L void ListOut_L(LinkList &L,int n)//剔除元素,n为线性表元素个数, { cout<<"请输入起始密码:"<>i; cout<<"出列的元素依次为:"<next; for(m=1;m<=n;m++)//建立一个循环,实现剔除n个元素 { for(j=1;j!=i;j++) { p=p->next; q=q->next; } cout<num<<"\t"; i=p->data; q->next=p; p=q; p->next=q->next->next; p=p->next; q->next=p; } }//ListOut_L void getout(LinkList &L,int n)//输出线性表函数 { p=L;i=1; cout<next;i<=n;p=p->next,i++) cout<<"("<num<<","<data<<"),"; cout<<"\b"<<")"<>n; CreateList_L(L,n); getout(L,n); ListOut_L(L,n); cout<item=item,p->next=0; return p; } nodeT add(nodeT *head,nodeT node) { if (!(*head)) *head=node; else if ((*head)&&!(*head)->next) (*head)->next=node; else add(&(*head)->next,node); return node; } /* 求解约瑟夫过程 */ void Fun(nodeT node,int m) { int i; if (!node) return; printf("输出顺序:"); while (node!=node->next) { for (i=1;inext; printf("]",node->next->item); node->next=node->next->next,node=node->next; } printf("]",node->item); } void main() { nodeT head=0,p; int m,n,s,i; printf("输入m n s:");scanf("%d%d%d",&m,&n,&s); /* 创建一个具有m个元素的循环链表 */ for (i=1,i<=m;p=add(&head;,i++));p->next=head; /* 将指针移到位置s上 */ for (p=head,i=1;i<=s;p=p->next); /* 开始计算 */ Fun(p,n); } ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.