约瑟夫单链表问题

静之深 2010-03-28 05:56:44
注:此问题采用无头指针的单链表进行处理



#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define NULL 0
typedef int DataType;
typedef struct node{
DataType data;
struct node *next;
}LNode,*LinkList;



LinkList Creat_LinkList();
int Del_LinkList(LinkList H,int i);
LinkList Locate_LinkList(LinkList H,int i);
int Length_LinkList(LinkList H);
int josephus_LinkList(LinkList josephus_Link,int s,int m);




void main()
{
LinkList H,p=NULL;
int i,k,s,m;

H=Creat_LinkList();

p=H;

for(i=1;i<=10;i++)
{
p->data=i;
p=p->next;
}
p=NULL;
printf("\n please input the values of s=");//从第几个数开始
scanf("%d",&s);
printf("\n please input the values of m:");//间隔数
scanf("%d",&m);
k=josephus_LinkList(H,s,m);
if(k!=1)
exit(1);
}




LinkList Creat_LinkList()
{
LinkList H;
H=(LinkList)malloc(sizeof(LNode));
if(H)
H->next=NULL;
return H;
}

int Del_LinkList(LinkList H,int i)
{
LinkList p,q;
if(H=NULL)
{
printf("空表不能删除");
return(0);
}
p=Locate_LinkList(H,i-1);
if(!p)
{
printf("参数 i错");
return(0);
}
q=p->next;
p->next=q->next;
free(q);
return(1);
}

LinkList Locate_LinkList(LinkList H,int i)
{
LinkList p;
int j;
p=H;j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(j!=i||!p)
{
printf("参数i错或单链表不存在");
return(NULL);
}
return(p);
}


int Length_LinkList(LinkList H)
{
LinkList p=H;
int count=0;
while(p)
{
p=p->next;
count++;
}
return(count);
}




int josephus_LinkList(LinkList josephus_Link,int s,int m)
{
int s1,i;
int w;
LinkList p=josephus_Link;
if(josephus_Link=NULL)
{
printf("表中无元素");
return(0);
}
s1=s-1;
printf("请输出约瑟夫序列:");
for(i=Length_LinkList(josephus_Link);i>0;i--)
{
s1=(s1+m-1)%i;
for(s1=1;s1<=(s1+m-1)%i;s1++)
p=p->next;
w=p->data;
printf("%d\t",w);
Del_LinkList(josephus_Link,s1+1);
}
return(1);
}



vc6.0调试结果:

"0x004010b5" 指令引用的 "0x00000000" 内存。该内存不能为 "written"。

要终止程序,请单击“确定”。
要调试程序,请单击“取消”。
请各位大虾帮帮小弟
...全文
86 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
静之深 2010-03-28
  • 打赏
  • 举报
回复
不行啊 运行时还是在那一块有问题
AlanBruce 2010-03-28
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define NULL 0
typedef int DataType;
typedef struct node{
DataType data;
struct node *next;
}LNode,*LinkList;



LinkList Creat_LinkList();
int Del_LinkList(LinkList H,int i);
LinkList Locate_LinkList(LinkList H,int i);
int Length_LinkList(LinkList H);
int josephus_LinkList(LinkList josephus_Link,int s,int m);




void main()
{
LinkList H,p=NULL;
int i,k,s,m;

H=Creat_LinkList();

p=H;

for(i=1;i<=10;i++)
{
p->data=i;
p->next = p + sizeof(int);//在这里。链表的一位指针问题
}
p=NULL;
printf("\n please input the values of s=");//从第几个数开始
scanf("%d",&s);
printf("\n please input the values of m:");//间隔数
scanf("%d",&m);
k=josephus_LinkList(H,s,m);
if(k!=1)
exit(1);
}




LinkList Creat_LinkList()
{
LinkList H;
H=(LinkList)malloc(sizeof(LNode));
if(H)
H->next=NULL;
return H;
}

int Del_LinkList(LinkList H,int i)
{
LinkList p,q;
if(H=NULL)
{
printf("空表不能删除");
return(0);
}
p=Locate_LinkList(H,i-1);
if(!p)
{
printf("参数 i错");
return(0);
}
q=p->next;
p->next=q->next;
free(q);
return(1);
}

LinkList Locate_LinkList(LinkList H,int i)
{
LinkList p;
int j;
p=H;j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(j!=i||!p)
{
printf("参数i错或单链表不存在");
return(NULL);
}
return(p);
}


int Length_LinkList(LinkList H)
{
LinkList p=H;
int count=0;
while(p)
{
p=p->next;
count++;
}
return(count);
}




int josephus_LinkList(LinkList josephus_Link,int s,int m)
{
int s1,i;
int w;
LinkList p=josephus_Link;
if(josephus_Link=NULL)
{
printf("表中无元素");
return(0);
}
s1=s-1;
printf("请输出约瑟夫序列:");
for(i=Length_LinkList(josephus_Link);i>0;i--)
{
s1=(s1+m-1)%i;
for(s1=1;s1<=(s1+m-1)%i;s1++)
p=p->next;
w=p->data;
printf("%d\t",w);
Del_LinkList(josephus_Link,s1+1);
}
return(1);
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧