| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 487 人关注过本帖
标题:帮忙修补下程序。。【出列问题】
只看楼主 加入收藏
dtczhl
Rank: 1
来 自:浙/杭
等 级:新手上路
帖 子:533
专家分:0
注 册:2008-9-4
结帖率:100%
收藏
 问题点数:0 回复次数:2 
帮忙修补下程序。。【出列问题】
题7. 出列问题
[基本要求]
有1至 N编号的N 个人按顺时针方向围坐一圈,每人持有一个密码(正整数),一开始以正整数m作为报数上限值,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的报数上限值,从他的顺时针方向上的下一个人开始重新报数,如此下去,直至所有的人全部出列为止,要求产生记录出列顺序的表。如N = 7,每个人的密码依次是:3,1,7,2,4,8,4,m的值为20,则出列顺序为6,1,4,7,2,3,5。所有人用一个循环单链表表示,表中每个结点代表一个人,按出列次序依次将结点从循环单链表中删除,并按顺序存放在一个单链表中,链表的每个结点包括三个字段:code代表密码,no代表人的编号,link是指向下一个结点的指针。在主函数中,用堆分配的方法建立对象。循环展开对问题的求解。

帮我修补下(帮我创建个delete函数模板)。语言风格和书写水平如下吧。。我大一。。只能看懂基础的表达。。还有麻烦检查下下面的程序(有错改改,还有要根据题意)。。知道要求很高。。。。拜托了
#include<stdio.h>
#include<stdlib.h>
struct student
{
int code;int no; struct node *next;
};
void main()
{
void create(student *head,int n);
void delete(student *head,int m);
struct student *head;
int n;int m;
printf("输入人数n和报数上限值m:\n");
scanf("%d%d",&n,&m);
head=(student *)malloc(sizeof(struct student));
creat(head,n);
delete(head,m);
free(head);
}
void create(student *head,int n)
{
sutdent rear,p;
int i;
head==NULL;
if(n>0)
{
for(i=1;i<=n;i++)
{
p=(struct student *)malloc(sizeof(struct student));
p->code=i;
printf("请输入第%d个密码:",p->code);
scanf("%d",&(p->no));
if(i==1)
{
head=p;rear=p;
}
else
{
rear->next=p;
rear=p;
}
}
rear->next=head;
}
}
搜索更多相关主题的帖子: 出列 修补 
2008-09-07 21:35
eager
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-10-17
收藏
得分:0 
先建立个循环链表 List ,定义一个头节点Head和一临时节点P。用int变量temp存储链表要循环的次数temp =(报数上限%剩下的人数)。while(temp--) P = P->next找到出列结点P,Head = P->next ;将P出列 。

你程序不完整 不好看。上面的说法你可以参考一下。大一的就搞得这么认真不错呀。看看数据结构的数吧!

sutdent rear,p;
应该定义成 sutdent *rear,*p;
2008-09-10 22:57
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
#include"stdio.h"
#include"stdlib.h"
struct student
{
  int nextp;
  int no;
}*link;
main()
{
  int i,n,s,k,m,count;
  printf("Tell me hoe many student are there?");
  scanf("%d",&n);
  printf("From which to count?");
  scanf("%d",&m);
  printf("How many shall I count?");
  scanf("%d",&s);
  link=(struct stucent * )malloc(sizeof(struct student)*n);
  for(i=0;i<n;i++)
  {
    if(i==n-1)
      (link+i)->nextp=0;
    else
      (link+i)->nextp=i+1;
    (link+i)->no=i+1;  
  }
  printf("stand out:\n");
  k=n-1;
  for(i=0;i<m-1;i++)
  {
    k=(link+k)->nextp;
  }
  for(count=0;count!=n;count++)
  {
    for(i=0;i<s;)
    {
      k=(link+k)->nextp;
      if((link+k)->no!=0)
        i++;
    }
    printf("%d\t",(link+k)->no);
    (link+k)->no=0;
  }
}

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-09-10 23:34
快速回复:帮忙修补下程序。。【出列问题】
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025876 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved