注册 登录
编程论坛 数据结构与算法

我哪儿错了嘛 告诉我 我改

上官绯绯 发布于 2012-03-27 22:12, 647 次点击
求两个集合的交:
#include "stdio.h"
#include "stdlib.h"

#define NULL 0
#define OK 1
#define ERROR -1

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

void CreateList_L(LinkList *L,int n)//即使输入乱序的元素也会顺序的打出
{
    int i,j,e,k,o;
    LinkList p;
    *L=(LinkList)malloc(sizeof(LNode));
    (*L)->next=NULL;
    ListInsert_L(*L,1,e);
    for(i=2;i<=n+1;i++)
    {
        p=(LinkList)malloc(sizeof(LNode));
        scanf("%d",&p->data);
        o=p->data;
        //p->next=(*L)->next;(*L)->next=p;
        for(j=1;j<=i;j++)
        {
            GetElem_L(L,j,&e);
            if(p<e) break;
        }
        //k=LocateElem_L(p,L,e,n);
        ListInsert_L(*L,j,e);
    }
}

Status GetElem_L(LinkList L,int i,ElemType *e)
{

    int j;
    LinkList p;
    p=L->next;
    j=1;
    while(p&&j<i)
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i) return ERROR;
    e=p->data;
    return OK;
}

Status ListInsert_L(LinkList *L,int i,ElemType e)
{
    int j;
    LinkList p,s;
    p=L;j=0;
    while(p&&j<i-1)
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)return ERROR;
    s=(LinkList)malloc(sizeof(LNode));
    s->data=e;s->next=p->next;
    p->next=s;
    return OK;
}

Status ListDelete_L(LinkList *L,int i,ElemType *e)
{
    int j;
    LinkList p,q;
    p=L;j=0;
    while(p->next&&j<i-1)
    {
        p=p->next;
        ++j;
    }
    if(!(p->next)||j>i-1) return ERROR;
    q=p->next;p->next=q->next;
    e=q->data; free(q);
    return OK;
}

void Display(LinkList L){
    LinkList p=L->next;
    while(p!=NULL){
        printf("%d__",p->data);
        p=p->next;
    }
 return;
}

/*int LocateElem_L(LinkList p,LinkList L,ElemType e,int n)
{
    int i,q;
    q=L->next;
    for(i=1;i<=n;i++)
    {
        if(p=q) return i;
        else q=L->next;
    }
}*/

void MergeList_L(LinkList *La,LinkList *Lb,LinkList *Lc)
{
    LinkList pa=(*La)->next,pb=(*Lb)->next,pc;

    pa=(*La)->next;
    pb=(*Lb)->next;
    Lc=pc=La;
    while(pa&&pb)
    {
        if(pa->data<pb->data)
        {
            pc->next=pa;pc=pa;pa=pa->next;
        }
        else
        {
            if(pa->data==pb->data)
            {
                pa=pa->next;
            }
            else
            {
                pc->next=pb;pc=pb;pb=pb->next;
            }
        }


    }
    pc->next=pa?pa:pb;
    free(Lb);
}

int main()
{
    LinkList La,Lb,Lc,m,n,i,j;
    printf("m?");
    scanf("%d",&m);
    CreateList_L(&La,m);
    Display(La);
    printf("n?");
    scanf("%d",&n);
    CreateList_L(&Lb,n);
    Display(Lb);
    //MergeList_L(&La,&Lb,&Lc);
    //Display(Lc);
}
5 回复
#2
寒风中的细雨2012-03-30 15:11
分, 太少啦。。。
#3
hcl10082012-03-30 21:45
我靠。。。你这个是不是连编译都不行啊。。。
#4
绿茶盖儿2012-04-04 18:04
也不说遇到了什么错误
#5
王者之道2012-05-11 19:43
应该是函数未定义之前就是用了
#6
低调求学2012-05-11 20:39
void CreateList_L(LinkList *L,int n)//即使输入乱序的元素也会顺序的打出
{
    int i,j,e,k,o;
    LinkList p;
    *L=(LinkList)malloc(sizeof(LNode));//这里L前面加*是取值
    (*L)->next=NULL;
    ListInsert_L(*L,1,e);
    for(i=2;i<=n+1;i++)
    {
        p=(LinkList)malloc(sizeof(LNode));
        scanf("%d",&p->data);
        o=p->data;
        //p->next=(*L)->next;(*L)->next=p;
        for(j=1;j<=i;j++)
        {
            GetElem_L(L,j,&e);
            if(p<e) break;
        }
        //k=LocateElem_L(p,L,e,n);
        ListInsert_L(*L,j,e);
    }
}
L 是指针了嘛。。前面加*是取值啦。。。
1