| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1552 人关注过本帖, 1 人收藏
标题:要疯了,帮忙看下!!!
只看楼主 加入收藏
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
这是个兄弟写的.LZ看看他的吧,他代代码很规范
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

typedef struct Node{
    int data;
    struct Node *next;
}*LinkList;

int CreateList(LinkList &L,int m); /* 将m个人1到m编号依次插入链表L中 */
int GetNode(LinkList &L,int n); /* 依次删除输出链表中符合要求的节点 */

int CreateList(LinkList &L,int m)
{
    int i=1;
    LinkList t,p;
    L=(LinkList)malloc(sizeof(struct Node));   
    if(L==NULL)
    {
        printf("动态分配内存失败!\n");
        return -1;
    }
    p=L;
    for(i=1;i<=m;i++) /* 依次为节点分配内存,插入链表 */
    {
        t=(LinkList)malloc(sizeof(struct Node));
        if(t==NULL)
        {
            printf("动态分配内存失败!\n");
            return -1;
        }
        t->data=i;
        p->next=t;
        p=t;
    }
    p->next=L->next; /* 最后一个节点next指针指向第一个节点 */
    return 0;
}

int GetNode(LinkList &L,int n)
{
    LinkList p,s;
    int i=0,j=0;
    p=L->next;
    while(p->next!=p) /* 链表中只有一个节点时终止 */
    {
        i++;
        if(i==n-1) /* 找到报数n的节点,输出节点值并删除节点 */
        {
            j++;
            s=p->next;
            p->next=p->next->next;
            printf("%-6d",s->data);
            if(j%10==0)
                printf("\n");
            i=0;
            free(s);
        }
        p=p->next;
    }
    printf("%-6d",p->data);
    free(p);
    free(L);
    return 0;
}

int main()
{
    int m,n;
    LinkList L;

    printf("Enter the total number of the person[m]:"); /* 总人数 */
    scanf("%d",&m);
    printf("Enter the number of get out[n]:");
    scanf("%d",&n);
    CreateList(L,m);
    printf("The out queue is:\n");
    GetNode(L,n);
    getch();
    printf("\n");
    return 0;
}

学习需要安静。。海盗要重新来过。。
2008-03-02 23:44
晨曦的朝阳
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2008-1-24
收藏
得分:0 
这是修改后的代码:
#include<stdio.h>
#include<malloc.h>

typedef struct node
{
    int x;
    struct node *next;
}list;
list *create(int n)
{
    list *head,*p,*r;
    int i,j=0;
    p=(list *)malloc(sizeof(list));
    head=p;
    head->next=p;
    
    for(i=0;i<n;i++)
       {
            r=(list *)malloc(sizeof(list));
            r->x=(++j);
            p->next=r;
            r->next=head;
            p=r;
       }
    
    return head;
}
list *del(list *head,int t)
{
    list *p,*r,*s;
    p=head;
    s=p;
    p=p->next;
    while(t!=p->x)
         {
        s=p;
        p=p->next;
         }
    r=p;
    s->next=p->next;
    p=s->next;
    free(r);
    return s;
}
void calcul(list *head,int m,int j)
{
    int i,k=0;
    list *p,*r;
    p=head;
    for(i=1;i<j;i++)
        p=p->next;
    while(head!=head->next)
         {
        for(i=0;i<m;i++)
           {
            p=p->next;
            if(p!=head)
                k++;
            else
                i--;
            if(k==m)
                {
                    printf("%3d",p->x);
                    k=0;
                    r=del(head,p->x);
                    p=r;
                    break;
                }
           }
        }
}
void main()
{
    list *head;
    int j,N,M;/*j为从第几个人开始报数,*N为总共人数,M为数到几出列*/
    head=create(N);
    calcul(head,M,j);
}
2008-03-03 14:15
快速回复:要疯了,帮忙看下!!!
数据加载中...
 
   



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

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