关于C语言数据结构的问题(约瑟夫环)

我自己写的一个程序,大家看一下毛病在哪里,如果能够帮我运行成功并输出正确的结果的话,追加分#include<string.h>#include<ctype.h>#incl... 我自己写的一个程序,大家看一下毛病在哪里,如果能够帮我运行成功并输出正确的结果的话,追加分
#include<string.h>
#include<ctype.h>
#include<malloc.h> // malloc()等
#include<limits.h> // INT_MAX等
#include<stdio.h> // EOF(=^Z或F6),NULL
#include<stdlib.h> // atoi()
#include<io.h> // eof()
#include<math.h> // floor(),ceil(),abs()
#include<process.h> // exit()
#include<iostream.h> // cout,cin
#include <conio.h>

// 函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1

typedef int Status;
typedef int ElemType;
typedef struct NodeType{
ElemType data,locate;
NodeType *next;
} NodeType,*LinkType; //结点类型,指针类型

LinkType SuccNode(LinkType p)
{ //若指针p!=NULL,则返回指向p所指结点的后续元素的指针,
//否则返回NULL
if (p){
return p->next;
}
else{
return NULL;
}
}
typedef struct OrderedList{

LinkType head; //分别指向线性链表的头结点和尾结点
int size; //指示链表当前的长度
}OrderedList; //有序链表类型

//有序链表的基本操作如下:

bool InitList(OrderedList &L,int n)
{
if(n==0) return ERROR;
int i;LinkType p,q;
if(L.head=((NodeType*)malloc(sizeof(NodeType))) )
{printf("请输入地1个人的密码");
scanf("%d",&L.head->data);L.size=1;L.head->locate=1;}
else return ERROR;
q=L.head;
for(i=2;i<=n;i++)
{
if(p=((NodeType*)malloc(sizeof(NodeType))))
{q->next=p;
q=p;
printf("请输入第%d个人的密码",i);
scanf("%d",&p->data);
L.size++;
p->locate=i;}
else return ERROR;

}
q->next=L.head;

}//InitList
void Free(LinkType &p)
{ //释放p所指结点
free(p);
p = NULL;
}
#include "Node.h"

LinkType delet(LinkType p,OrderedList &T)
{ LinkType q,m;m=q=p;
while(p->next!=q)
p=SuccNode(p);
p->next=q->next;
Free(q);
p->next=q;printf("yunxing");

return m->next;
}

void Joseph(OrderedList &L,int m)
{ LinkType p=L.head,e;int n;
for(n=m;n>=0;n--)
{
if(n==1)
{n=p->data ;printf("%d",n);
printf("%d",p->locate);p=delet(p,L);

e=p->next;if(e==p) n=0;
}
else if(n==0) {printf("%d",p->locate );break;}
p=SuccNode(p);
}

}

#include"Joseph.h"
void main (){

int m;int n;LinkType p;
OrderedList T;
printf("请输入m 与 n 的值");
scanf("%d %d",&m,&n);
if(n<1) exit(OVERFLOW);
InitList(T,n);
p=T.head; p=SuccNode(p->next );
printf("%d %d \n",p->locate ,p->data);

Joseph(T,m);

}
可能因为我思路的原因干扰了你的思路,所以你按照我的思路得来的程序也同样出现了错误,估计是指针超出范围,就不给你额外加分了,这个问题我通过别的算法解决了,但是同样也要感谢你
展开
 我来答
zx198799
推荐于2016-06-24 · TA获得超过1225个赞
知道小有建树答主
回答量:509
采纳率:100%
帮助的人:283万
展开全部
#include<string.h>
#include<ctype.h>
#include<malloc.h> // malloc()等
#include<limits.h> // INT_MAX等
#include<stdio.h> // EOF(=^Z或F6),NULL
#include<stdlib.h> // atoi()
#include<io.h> // eof()
#include<math.h> // floor(),ceil(),abs()
#include<process.h> // exit()
#include<iostream> // cout,cin
#include <conio.h>

// 函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1

///////////////////////////////////////////////////////////////////////////
typedef int Status;

typedef int ElemType;

typedef struct NodeType
{
ElemType data,locate;
NodeType *next;
} NodeType,*LinkType; //结点类型,指针类型

typedef struct OrderedList{

LinkType head; //分别指向线性链表的头结点和尾结点
int size; //指示链表当前的长度
}OrderedList; //有序链表类型

///////////////////////////////////////////////////////////////////////////
bool InitList(OrderedList &L,int n)
{
if(n==0)
return ERROR;

int i;
LinkType q;

if(L.head=((NodeType*)malloc(sizeof(NodeType))))
{
printf("请输入第1个人的密码:");
scanf("%d",&L.head->data);
L.size=1;
L.head->locate=1;
L.head->next = L.head;
}
else
return ERROR;

q=L.head;
for(i=2;i<=n;i++)
{
if(q->next=((NodeType*)malloc(sizeof(NodeType))))
{
q=q->next;
printf("请输入第%d个人的密码:",i);
scanf("%d",&q->data);
L.size++;
q->locate=i;
}
else
return ERROR;
}
q->next=L.head;

return TRUE;
}

void Joseph(OrderedList &L,int m)
{
LinkType p = L.head;
LinkType q = p;
int i;
printf("输出顺序如下:");
while( L.size > 0 )
{
i = m - 1;
while( i > 0 )
{
q = p;
p = p->next;
i--;
}
printf("第%d个人,密码为:%d\n",p->locate,p->data);
q->next = p->next;
free(p);
L.size--;
p = q->next;
}
}

void main ()
{
int m;
int n;
OrderedList T;

//n表示约瑟夫环中节点个数,m表示报数循环的个数
printf("请输入n 与 m 的值\n");
scanf("%d %d",&n,&m);
if (n<1||m<1)
{
printf("对不起,输入有误!");
exit(OVERFLOW);
}

InitList(T,n);
Joseph(T,m);

getchar();
getchar();
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式