| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 634 人关注过本帖
标题:[求助]13个数字,隔2去1,输出最后剩下的数
取消只看楼主 加入收藏
liqingyang
Rank: 2
等 级:论坛游民
帖 子:47
专家分:39
注 册:2010-2-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
[求助]13个数字,隔2去1,输出最后剩下的数
13人围一圈,从第1人开始报数,凡报到3者退出圈子,找出最后留在圈中的人原来的序号.

/*13个数字,隔2去1,输出最后剩下的数*/
#define    STU    struct stu
#define    LEN    sizeof(struct stu)
STU
{   
    int    num;
    STU*    next;
};/*申请结构链表*/
STU*    cart(int n)/*建立一个n个结点的链表*/
{
    int    i;
    STU    *head,*pd,*pf;
    for(i=1;i<=n;i++)
    {
        pd=(STU*)malloc(LEN);/*申请一块内存,用于存放一个结点*/
        pd->num=i;
        
        if(i==0)
            pf=head=pd;/*如果产生的是第一个结点,则head指向该结点*/
        else
            pf->next=pd;
        pd->next=NULL;
        pf=pd;
    }
    pf->next=head;
    return head;/*返回表头*/
}
void main()
{
    int    i,n;
    STU    *pl,*pt;
    printf("请输入链表成员的个数");
    scanf("%d",&n);
    pl=cart(n);
   
    while(pl->next != pl)/*链表中结点的个数不为1时*/
    {
        for(i=0;i<3;i++)
        {
            pt=pl;
            pl=pl->next;
        }
        pt->next=pl->next;
        free(pl);/*释放被删节点内存*/
    }
    printf("%d",pl->num);
   
    return;
}

编译提示:    Erroy:Undefined symbol 'NULL'    未定义的符号"NULL"

求各位指点是怎么回事?
搜索更多相关主题的帖子: 数字 输出 
2010-05-05 19:41
liqingyang
Rank: 2
等 级:论坛游民
帖 子:47
专家分:39
注 册:2010-2-24
收藏
得分:0 
加上头文件
#include "stdlib.h"
#include "stdio.h"
编译通过了,但运行结果是0,晕.
2010-05-05 21:20
liqingyang
Rank: 2
等 级:论坛游民
帖 子:47
专家分:39
注 册:2010-2-24
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define    STU    struct stu
#define    LEN    sizeof(struct stu)
STU
{
    int    num;
    STU*    next;
};/*申请结构链表*/
STU*    cart(int n)/*建立一个n个结点的环形单向链表*/
{
    int    i;
    STU    *head=NULL,*pd=NULL;
    if(0 != n)  //这里为什么用if,怎么实现循环?这句话是什么意思?
    {
        pd=(STU *)malloc(n*sizeof(STU));//这句里的 n* 是什么意思?
        memset(pd,0,n*sizeof(STU));//这句话有什么作用?
        head=pd;
        for(i=1;i<n;i++)
        {
            pd->num=i;
            pd->next=pd+1;
            pd=pd->next;
        }
        pd->num=n;
        pd->next=head;
    }
    return head;
}
int main()
{
    int    i,n;//m
    STU    *pl;// *pt;
    printf("请输入链表成员的个数:\n");
    scanf("%d",&n);
    //scanf("%d%d",&n,&m);n=13,m=3
    pl=cart(n);
    //pt=pl;
    while(pl->next != pl)/*链表中结点的个数不为1时*/
    {
        for(i=1;i<2;i++)//i<m-1    //这句里为什么只循环一次?不是要求隔2去1吗?
        {
            pl=pl->next;//取到报到m-1的结点
        }
        pl->next=pl->next->next;//删除报到m的那个结点
        pl=pl->next;            //
    }
    printf("%d\n",pl->num);
    free(pl); /*先输出后释放,释放被删节点内存*/
    return 0;
}

求各位帮小弟解释一下上面红色标注语句的含义,初学看不懂,感激不尽..
2010-05-08 23:38
快速回复:[求助]13个数字,隔2去1,输出最后剩下的数
数据加载中...
 
   



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

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