最好是把算法写成框图~~~最好快点很着急用!!
#include"stdio.h"
#include"malloc.h"
typedef int Datatype;
typedef struct node //定义单链表结点
{ Datatype code;
Datatype num;
struct node *next;
}Linklist;
Linklist *creatsclist(int x) //创建链表
{ Linklist *p,*q,*H; //定义指针
int i,code; //定义空间数据和常量i
i=1;
H=(Linklist *)malloc(sizeof(struct node));//开辟空间
H->next=NULL;
p=H;
while(i<=x)
{
printf("请输入第%d人的密码:",i);scanf("%d",&code);printf("\n");
q=(Linklist *)malloc(sizeof(struct node)); //开辟空间
q->code=code;
q->num=i;
q->next=NULL;
p->next=q;
p=q; i++;
}
q->next=H->next; //尾结点链接到头结点的下一结点
return H;
}
void printlist(Linklist *H,int x)
{ Linklist *p; int i=1;
p=H->next;
if(p!=NULL)
while(i<=x) //循环
{ printf("%d,%d\t",p->num,p->code);
p=p->next;
i++;
}
printf("\n\n");
}
void Joseph(Linklist *H)
{ Linklist *p,*q,*v; //创建循环链表
int m,k; k=0;
p=H->next; q=H; //p为头结点后的数据,q指向头结点
printf("请输入报数上限值:"); scanf("%d",&m); printf("\n");
while(p!=q)
{ k++;
if(k==m) //当k=m时,输出p所指的结点的序号及密码,并将该结点的code作为新的m值,再次循环
{ printf("%d\t",p->num);
m=p->code; k=1;
if(H->next==p) H->next=p->next;
q->next=p->next; //将p所指的结点删除
v=p;
p=q->next;
free(v);//释放v的空间
}
q=p;
p=p->next; //继续循环
}
printf("%d\t",p->num);
printf("\n");
}
void main()
{ Linklist *H;
int x;
printf("请输入总人数:"); scanf("%d",&x); printf("\n");
H=creatsclist(x);
printf("输出每个人的编号,密码:\n");
printlist(H,x);
printf("约瑟夫环问题结果输出:\n");
Joseph(H);
}
约瑟夫环问题怎么解决啊?请用C语言写代码,谢谢!
程序可以运行的
数据结构中的约瑟夫环问题用C语言怎么编写出来啊?
1. 程序分析:这是一个比较经典的算法--约瑟夫环问题.2.个人分析: 算法比较经典,对于这样的问题本应该使用链表的形式会比较容易.约瑟夫环算法 则体现了使用数组来完成链表该完成的功能,虽然形式上完全不相同,但却求出了 相同的结果.有异曲同工之妙.总之我个人认为是数组中非常经典的算法了.希望本 ...
求助, 约瑟夫环问题(C语言)
修改后的版本,解决初始m为1的情况。include<stdio.h> include<malloc.h> typedef struct node{ int num;int val;struct node* next;}listnode;\/\/两个结构体可以合并以减少程序复杂度 typedef listnode* linklist;int main(){ int n,i,b,m,j;linklist q=(listnode*)malloc(sizeof(listnode))...
求c语言用循环链表编写约瑟夫环代码(速度求解)!!!
include "stdlib.h"define S sizeof(struct node)struct node { int num;struct node *next;};typedef struct node NODE;NODE *createlinklist(int n){ NODE *head,*p,*q;int i=1;head=p=(struct node*)malloc(sizeof(struct node));p->num=i;for(i=2;i<=n;i++){ q=(struct no...
求用循环队列解决约瑟夫环问题的C语言代码,急,速度!!!
void main(){ int a, b, c;\/\/t i, j, k;\/\/t aa[100], b[100];cout<<"请输入总人数:";cin>>a;cout<<endl<<"请输入开始位子:";cin>>b;cout<<endl<<"请输入步长:";cin>>c;Fmade(a, b, c);} void Fmade(int x, int y, int z){ int i, j=0, k=0;int aa...
求看下这个用C语言写的约瑟夫环代码错在哪儿
void del_Joseph(Joseph*current_p,Joseph *pre_p)这个函数去掉参数列表,直接用全局变量就行,不去掉反而会错。因为,当他们作为参数传递时,本身的值是不能被改变的。而你在函数中释放掉current_p所指向的空间,但current_p仍指向该空间,导致后面出错。发现这个问题,只要你打印下每次删除的值就行了...
C语言编程:有n个人围成一圈,按顺序从1到n编号。从第一个人开始,报到3...
int i,j=0,k=0,n;int a[30]={0};printf("请输入有几个人玩游戏:");scanf("%d",&n);for(i=0;i<n;i++){ a=1;\/\/1代表活着,0代表出局 } for(i=1;i<4;i=i%3+1)\/\/控制i的值在[0,3]{ if(3==i&&a[j]!=0){ a[j]=0;printf("%d号玩家出局\\n",j+1);k++;...
求数据结构(C语言版)题集实习题答案
node[n+i].lchild=x1;buff_node[n+i].rchild=x2;} for (i=0;i<n;i++){ cd.start=n;c=i;p=huff_node[c].parent;while(p!=0){ if (huff_node[p].lchild==c)cd.bits[cd.start]=0;else cd.bits[cd.start]=1;cd.start=cd.start-1;c=p;p=huff_node[p].parent;} ...