| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 387 人关注过本帖
标题:为什么我的MergList_L函数不能执行呢?求助
只看楼主 加入收藏
shayoyong
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-3-12
收藏
 问题点数:0 回复次数:1 
为什么我的MergList_L函数不能执行呢?求助
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW 0
 

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

/*
int InitList(LinkList L)
{
    L=NULL;
    return OK;
}  不带头结点的初始化
*/
int InitList_L(LinkList *L)     //建立一个只含头结点的空链表
{
    (*L)=(LinkList)malloc(sizeof(LNode));
    if(!L)
        exit(OVERFLOW);
    (*L)->next=NULL;
    return OK;
}

//头文件LinkList .h结束
int CreateList_L(LinkList *L,int n) //建立含n个元素的单链表
{
    LinkList p,q;
    int i;
    printf("Input the datas : \n");
    q=*L;
    for(i=0;i<n;i++ )
    {
       p=(LinkList)malloc(sizeof(LNode));
       scanf("%d",&p->data);
        p->next=NULL;
       q->next=p;
       q=q->next;
      /*
      p->next=q->next;
      q->next=p;
      q=p;
     */
    }
    return OK;
}

int TraverseList_L(LinkList L)    //遍历链表
{
    LinkList p;
    p=L->next;
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
    return OK;
}
void MergList_L(LinkList *La,LinkList *Lb,LinkList *Lc)
{   
     
   
    LinkList pa,pb,pc;
 
    pa=(*La)->next;pb=(*Lb)->next;
    (*Lc)=pc=(*La);
    while( pa&&pb)
    {
        //if(pa->data <= pb->data)先前这里...
        if(pa->data<pb->data ||pa->data=pb->data)
        {pc->next = pa; pc=pb; pa=pa->next;}         //这里错把pb赋给pc了。。。囧大
        else
        {pc->next=pb;pc=pb;pb=pb->next;}
    }   
    pc->next=pa?pa:pb;
    free(Lb);
}
int main()
{
   
     
   
    int n1,n2;
    LinkList La,Lb,Lc;
   
    InitList_L(&La);
    InitList_L(&Lb);
    InitList_L(&Lc);
   
    printf("Input the length of the list La: ");
    scanf("%d",&n1);
    CreateList_L(&La,n1);
   
    printf("output the datas:");
    TraverseList_L(La);
   
    printf("Input the length of the list Lb: ");
    scanf("%d",&n2);
    CreateList_L(&Lb,n2);
   
    printf("output the datas:");
    TraverseList_L(Lb);
   
    printf("MergList la and lb : ");
    MergList_L(&La,&Lb,&Lc);
   
   
    printf("output the datas: ");
    TraverseList_L(Lc);
   
    //system("pause");
    return 0;
}


问题已解决

[ 本帖最后由 shayoyong 于 2010-3-13 09:03 编辑 ]
搜索更多相关主题的帖子: 函数 MergList 
2010-03-12 21:37
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
程序的基本 思路应该是一样的 你看看 也许能看出来

在MergList_L 函数中
在进行判断的时候 只有一 while()语句是不完整的
 while( pa&&pb)
    {
        //if(pa->data <= pb->data)先前这里...
        if(pa->data<pb->data ||pa->data=pb->data)
        {pc->next = pa; pc=pb; pa=pa->next;}         //这里错把pb赋给pc了。。。囧大
        else
        {pc->next=pb;pc=pb;pb=pb->next;}
    }   

还应该要考虑到 这样的事实pa和pb这两个指针不可能同时变到指向NULL
所以 可能在运行的时候 丢失数据

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

#define NULL   0
#define TYPE   struct List
#define LEN    sizeof( struct List )

struct List
{
    int data;
    struct List *next;
};

TYPE *Creat( int n )
{
    TYPE *head, *pf, *pb;
    int i;
    printf("Input data:");
    for( i = 0; i<n; i++)
    {
        pb = ( TYPE *) malloc ( LEN );
        
        scanf("%d",&pb->data);
        if( i == 0 )
            pf = head = pb;
        else
            pf->next = pb;
        pb->next = NULL;
        pf = pb;
    }
    return head;
}

void Output( TYPE *head )
{
    TYPE *pb;
    pb = head;

    while( pb != NULL )
    {
        printf("%d ",pb->data);
        pb = pb->next;
    }
    printf("\n");
    free(pb);
}

TYPE *MergList( TYPE *La, TYPE *Lb)
{
    TYPE *head, *pf, *pa, *pb;
    pa = La;
    pb = Lb;
    if( pa->data < pb->data )
    {
        head = pf = pa;
        pa = pa->next;
    }
    else
    {
        head = pf = pb;
        pb = pb->next;
    }
    while( (pa != NULL) && (pb != NULL) )
    {
        if( pa->data < pb->data )
        {
            pf->next = pa;
            pa = pa->next;
        }
        else
        {
            pf->next = pb;
            pb = pb->next;
        }
        pf = pf->next;
        if( (pa == NULL) && (pb != NULL) )
        {
            for( ; pb != NULL ; )
            {
                pf->next = pb;
                pb = pb->next;
            }
            pf = pf->next;
        }
        if( (pb == NULL) && (pa != NULL) )
        {
            for( ; pa != NULL ; )
            {
                pf->next = pa;
                pa = pa->next;
            }
            pf = pf->next;
        }
    }
    return head;
}

void main()
{
    int n1, n2;
    TYPE *La, *Lb, *Lc;

    printf("Input the length of the list La:");
    scanf("%d",&n1);
    La = Creat( n1 );
    printf("Output the datas:");
    Output( La );

    printf("Input the length of the list Lb:");
    scanf("%d",&n2);
    Lb = Creat( n2 );
    printf("Output the datas:");
    Output( Lb );

    printf("MergList La and Lb and ");
    Lc = MergList( La, Lb );
    printf("Output the datas:");
    Output( Lc );
}
2010-03-14 20:32
快速回复:为什么我的MergList_L函数不能执行呢?求助
数据加载中...
 
   



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

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