注册 登录
编程论坛 程序供求

那位路过的大神帮我看看我错在哪里了?我只能将第一个单链表A输入,第二个就不能输入(运行显示错误)

玲玲张 发布于 2015-10-29 20:51, 4602 次点击
#include <stdio.h>
#include <stdlib.h>

#define True 1
#define False 0
#define OK 1
#define Errorr 0

typedef int Status;
typedef int ElemType;

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

Status CreatList_L(LinkList &L,int n)
{
    LinkList p;
    int i;
    L=(LinkList )malloc(sizeof(LNode));   //初始化L(建立一个空表(头节点))
    L->next=NULL;
    //printf("Please enter a number:");
    //scanf("%d",&n);
    printf("Please enter %d number:",n);
    for(i=n;i>0;--i)
    {
        p=(LinkList )malloc(sizeof(LNode));   //建立一个新结点  
        scanf("%d",p->data);
        p->next=L->next;    //将L->next赋值给p->next
        L->next=p;   //将L->next指针指向p
    }
    return OK;
}

main()
{
    LinkList La,Lb,Lc;
    int n1,n2;
   
    printf("Please enter A:\n");
    printf("Please enter a number:");
    scanf("%d",&n1);
    CreatList_L(La,n1);

    printf("Please enter B:\n");
    printf("Please enter a number:");
    scanf("%d",&n2);
    CreatList_L(Lb,n2);

}
2 回复
#2
tlliqi2015-11-01 08:01
自己写的?
#3
玲玲张2015-11-01 10:52
恩恩;(可以帮我看一下下面我写的代码吗?我不知道错在哪?)
#include <stdio.h>
#include <stdlib.h>

#define True 1
#define False 0
#define OK 1
#define Error 0

typedef int Status;
typedef int ElemType;

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

//头插法(逆序输入)
Status CreateList_L(LinkList &L)
{
    LinkList p;
    int n,i;
    L=(LinkList)malloc(sizeof(LNode));//初始化
    L->next=NULL;
    printf("Please enter a number :");
    scanf("%d",&n);
    printf("Please enter %d number:",n);
    for(i=n;i>0;--i)
    {
        p=(LinkList)malloc(sizeof(LNode));    //创建新结点
        scanf("%d",&p->data);
        p->next=L->next;  //将 L->next指针域赋值给 p->next
        L->next=p;   // L->next指向 P
    }
    return OK;
}

//合并La和Lb,并写入到Lc
Status Combine_L(LinkList La,LinkList Lb,LinkList &Lc)
{
    LinkList pa,pb,p1,p2,k;
    Lc=(LinkList)malloc(sizeof(LNode));//初始链表Lc
    Lc->next=NULL;
    pa=La;pb=Lb;p1=pa;k=pa->next;
    //判断链表A中是否有重复的数据,若有,则删除
    while(pa!=NULL)
    {
        if(p1->next==NULL )
        {
            pa=pa->next;
            p1=pa;
        }   //移位
        else if(pa->data==p1->next->data)
        {
            p1->next=k->next;
            free(k);
        }    //删除
        else
        {
            p1=p1->next;
            k=k->next;
        }  //移位
    }  
    Lc=pa;
    //将链表B中数据与C 不相同的插入到Lc中
    while(pb!=NULL)
    {
        while(Lc!=NULL)
        {
            if(Lc->data == pb->data)
            {
                break;
            }
            else
            {
                Lc=Lc->next;
            }
        }
        if(Lc==NULL)
        {
            p2->data=pb->data;  //将 pb->data赋值给 P2->data
            Lc->next=p2;
            p2->next=Lc->next;
        }//插入
        else
        {
            return Error;
        }
        pb=pb->next;
    }
    return OK;
}

//求交集(将A与B相同的 数写入到C)
Status JiaoJi_L(LinkList La,LinkList Lb,LinkList &Lc)
{
    LinkList pa,pb,p1,k;
    Lc=(LinkList)malloc(sizeof(LNode));//初始链表Lc
    Lc->next=NULL;
    pa=La; pb=Lb;
    //判断链表A中是否有重复的数据,若有,则删除
    while(pa!=NULL)
    {
        if(p1->next==NULL )
        {
            pa=pa->next;
            p1=pa;
        }   //移位
        else if(pa->data==p1->next->data)
        {
            p1->next=k->next;
            free(k);
        }    //删除
        else
        {
            p1=p1->next;
            k=k->next;
        }  //移位
    }  
    Lc=pa;
    k=Lc;
    //判断Lb与Lc中是否有相同的数据,若无,则删除Lc中的数据
    while(Lc!=NULL)
    {
        while(pb!=NULL)
        {
            if(Lc->data == pb->data)
            {
                break;  //跳出该循环
            }
            else
            {
                pb=pb->next;
            }
        }
        if(pb==NULL)
        {
            Lc=k->next;
            free(k);
        } //删除
        Lc=Lc->next;  
    }
    return OK;
}

//求交集(将A与B相同的相减,然后把A中剩下的数写入到C)
Status ChaJi_L(LinkList La,LinkList Lb,LinkList &Lc)
{
    LinkList pa,pb,p1,k;
    Lc=(LinkList)malloc(sizeof(LNode));//初始链表Lc
    Lc->next=NULL;
    pa=La; pb=Lb;
    //判断链表A中是否有重复的数据,若有,则删除
    while(pa!=NULL)
    {
        if(p1->next==NULL )
        {
            pa=pa->next;
            p1=pa;
        }   //移位
        else if(pa->data==p1->next->data)
        {
            p1->next=k->next;
            free(k);
        }    //删除
        else
        {
            p1=p1->next;
            k=k->next;
        }  //移位
    }  
    Lc=pa;
    k=Lc;
    //判断Lb与Lc中是否有相同的数据,若有,则删除Lc中的数据
    while(Lc!=NULL)
    {
        while(Lc!=NULL)
        {
            if(Lc->data ==pb->data)
            {
                Lc=k->next;
                free(k);
            }//删除
            else
            {
                pb=pb->next;
            } //移位
        }
        Lc=Lc->next;  
    }
    return OK;
}

Status printLink(LinkList L)//打印链表
{
    LinkList p=L->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
    return OK;
}

main()
{
    LinkList La,Lb,Lc;
   
    printf("Please enter A:\n");
    CreateList_L(La);
    printf("Please enter B:\n");
    CreateList_L(Lb);
   
    printf("C = A ∪ B\n");
    Combine_L(La,Lb,Lc);
    printLink(Lc);
   
    printf("C = A ∩B\n");
    JiaoJi_L(La,Lb,Lc);
    printLink(Lc);
   
    printf("C = A - B\n");
    ChaJi_L(La,Lb,Lc);
    printLink(Lc);
   
}
1