| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 664 人关注过本帖
标题:将单循环链表该双循环链表,重写了程序,还是有问题请大家帮忙看看
只看楼主 加入收藏
世界模型
Rank: 4
等 级:业余侠客
威 望:1
帖 子:240
专家分:226
注 册:2010-9-12
结帖率:97.44%
收藏
已结贴  问题点数:10 回复次数:5 
将单循环链表该双循环链表,重写了程序,还是有问题请大家帮忙看看

#include<stdio.h>
#include<stdlib.h>

typedef struct LNode
{
    int    data;
    struct LNode *p,*next;
} LNode, *LinkList;

/*建立循环单链表*/
LinkList createList_L(int n)
{
     LinkList L=NULL;
    LNode *s,*r=NULL;
    int i;
    printf("请输入元素的个数n:");
    scanf("%d",&n);

    for(i=1;i<=n;i++)
    {
        s=(LNode*)malloc(sizeof(LNode));
        //s->data=i;
        s->next=NULL;
        if(L==NULL)
        {
            r=L=s;
        }
        else
            r->next=s;
        r=s;
    }
        r->next=L;

    printf("输入这些结点的数据:",n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&s->data);
        s=s->next;
    }

    return L;
}
void LinkChange(LinkList L)
{
    LinkList q;
    for(q=L;!q->next->p;q=q->next)
        q->next->p=q;
}
void print_LinkList(LinkList L)
{
    LinkList p;
    p=L->next ;
    //for(;p!=NULL;p=L->next)
        printf("%d",p->data);
}
int main()
{
    LinkList L;
    int n;

    L=createList_L(n);
    print_LinkList(L);

    LinkChange( L);
    print_LinkList(L);
    return 0;
}
搜索更多相关主题的帖子: 单循环 元素 
2011-03-16 13:33
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:10 
程序代码:
//将单循环链表该双循环链表,重写了程序,还是有问题请大家帮忙看看
#include<stdio.h>
#include<stdlib.h>

typedef struct LNode
{
    int    data;
    struct LNode *p,*next;
} LNode, *LinkList;

/*建立循环单链表*/
LinkList createList_L()
{
    LinkList L=NULL;
    LNode *s,*r=NULL;
    int i, n;
    printf("请输入元素的个数n:");
    scanf("%d",&n);

    for(i=1;i<=n;i++)
    {
        s=(LNode*)malloc(sizeof(LNode));
        //s->data=i;
        s->next=NULL;
        if(L==NULL)
        {
            r=L=s;
        }
        else
        {
            r->next=s;
            r=s;
        }
    }
    r->next=L;

    s = L;
    printf("输入这些结点的数据:\n");
/*    for(i=1;i<=n;i++)
    {
        scanf("%d",&s->data);
        s=s->next;
    }*/
    do
    {
        scanf("%d", &s->data );
        s = s->next;
    }while( L != s );


    return L;
}

LinkList LinkChange(LinkList L)
{
    LinkList pre, next;
    pre = L;
    do
    {
        next = pre->next;
        next->p = pre;
        pre = pre->next;
    }while( pre != L );

    return L;

 /*   for(q=L;!q->next->p;q=q->next)
    {
        q->next->p = q;
    }*/
}

void print_LinkList(LinkList L)
{
    LinkList p;
    p = L;
    do
    {
        printf("%d ",p->data);
        p = p->next;
    }while( p != L );

    printf("\n");
}

void r_print( LinkList L )
{
    LinkList p;
    p = L;
    do
    {
        printf("%d", p->data);
        p = p->p;
    }while( p != L );
    printf("\n");

}

int main()
{
    LinkList L;
    //int n;

    L=createList_L();
    print_LinkList(L);

    L = LinkChange( L);
    r_print(L);
    return 0;
}
2011-03-16 15:53
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
在做循环链表(单、双)的时候   用到循环的时候 最好的做法是使用do{}while();格式
这样判断的容易写些  不用设置计数器等类的标志

上面的代码虽然可以跑但是 在进行测试的时候 还是把判断边界的情况加进去
2011-03-16 15:57
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
程序代码:
void LinkChange(LinkList L)
{
    LinkList q;
    for(q=L;!q->next->p;q=q->next)
        q->next->p=q;
}
像这样的代码:试图改变链表的 不是引用(LinkList &L)格式  不带返回值的(除掉全局的) 可以考虑是不对的
2011-03-16 16:00
世界模型
Rank: 4
等 级:业余侠客
威 望:1
帖 子:240
专家分:226
注 册:2010-9-12
收藏
得分:0 
谢谢,
2011-03-16 20:07
帅的让人抽
Rank: 4
来 自:安徽
等 级:业余侠客
帖 子:94
专家分:224
注 册:2010-9-30
收藏
得分:0 
顶一下……

樱花下落的速度依然是秒速五厘米,即使发了一千次短信,
心与心之间也只能靠近一厘米……
2011-03-20 10:55
快速回复:将单循环链表该双循环链表,重写了程序,还是有问题请大家帮忙看看
数据加载中...
 
   



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

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