| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 536 人关注过本帖
标题:数据结构题目解决!
只看楼主 加入收藏
showboat2009
Rank: 2
等 级:论坛游民
帖 子:16
专家分:19
注 册:2010-3-11
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:3 
数据结构题目解决!
问题如下:

利用单链表存储集合(集合中不存在重复元素)。

基本要求

实现以下基本操作:
(1)    从键盘输入集合值,建立集合。
(2)    求集合的并、交和差,并输出结果。
搜索更多相关主题的帖子: 数据结构 
2010-03-26 19:27
xichong
Rank: 7Rank: 7Rank: 7
来 自:四川南充
等 级:黑侠
威 望:2
帖 子:146
专家分:582
注 册:2009-6-10
收藏
得分:5 
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*Linklist;
void initial(Linklist L)
{
    Linklist p;
    p=(Linklist)malloc(sizeof(LNode));
    if(!p) exit(0);
    L=p;
    L->next=NULL;
}
void creatlist(Linklist L)
{
    Linklist p,q;
    int m;
    q=L;
    printf("请输入若干个正整数,输入非正整数时结束:\n");
    while(1)
    {
        scanf("%d",&m);
        if(m>0)
        {
            p=(Linklist)malloc(sizeof(LNode));
            p->data=m;
            q->next=p;
            q=p;
        }
        else break;
    }
    p->next=NULL;
}
void displaylist(Linklist L)
{
    Linklist p=L;
    for(p=L->next;p!=NULL;p=p->next)
        printf("%d  ",p->data);
    printf("\n");
}
void function5(LNode d,LNode e,Linklist f)//求链表D与E的交集
{
    Linklist pd=&d,pe=&e,p,q;
    q=f;
    pd=pd->next;
    for(;pd!=NULL;pd=pd->next)
    {
        pe=&e;
        pe=pe->next;//pro:每次进入内循环pe的指针需要指到链表第一个结点 常见错误:在外循环外面就pe=pe->next,而在内循环中省了初始值for(;pe!=NULL;pe=pe->next)
        for(;pe!=NULL;pe=pe->next)
            if(pd->data==pe->data)
            {
                p=(Linklist)malloc(sizeof(LNode));
                p->data=pd->data;
                q->next=p;            
                q=p;        
            }
    }
            p->next=NULL;
            printf("输出链表D与E的交集的元素:\n");
            displaylist(f);   
            
}
void function7(LNode d,LNode e,Linklist f)//求链表D与E的并集******************************
{
    Linklist pd,pe,pf,pd_last;
    int flag;
    pf=f;
    pf->next=d.next;
    while(pf->next!=NULL)//pf指到链表D的末尾
        pf=pf->next;
    pd_last=pf;
    for(pe=e.next;pe!=NULL;pe=pe->next)
    {
        flag=0;
        pd=&d;
        do
        {
            pd=pd->next;
            if(pd->data==pe->data)//将指定的E链表中的值与D链表中的每个值比
            {
                flag=1;
                break;
            }
        }while(pd!=pd_last);
        if(flag==0)
        {
            pf->next=pe;
            pf=pe;
        }
    }
    pf->next=NULL;
    printf("输出链表D与E的并集的元素:\n");
    displaylist(f);
}
void function8(Linklist d,LNode e)//
{
    Linklist pd,pg,p,q;
    LNode g;
    int flag,i,k;
    function5(*d,e,&g);
    for(pg=g.next;pg!=NULL;pg=pg->next)
    {
        flag=1;
        k=0;//******************************
        for(pd=d->next;pd!=NULL;pd=pd->next)
        {   
            if(pg->data==pd->data)
            {
                flag=0;
                break;
            }
                k++;//*******放在if语句后
        }
            if(!flag)//删除操作
            {
                for(p=d,i=0;i<k;i++)//
                    p=p->next;
                pd=p;//pro:记录下前驱指针
                q=pd->next;
                pd->next=q->next;
            }
    }
    printf("输出链表D与E的补集的元素:\n");
    displaylist(d);
}
void main()
{
    LNode D,E,F;
    initial(&D);
    creatlist(&D);
    printf("输出链表D中的元素:\n");
    displaylist(&D);
    initial(&E);
    creatlist(&E);
    printf("输出链表E中的元素:\n");
    displaylist(&E);
    initial(&F);
    function5(D,E,&F);   
    initial(&D);
    creatlist(&D);
    printf("输出链表D中的元素:\n");
    displaylist(&D);
    initial(&E);
    creatlist(&E);
    printf("输出链表E中的元素:\n");
    displaylist(&D);
    initial(&F);
    function7(D,E,&F);
    initial(&D);
    creatlist(&D);
    printf("输出链表D中的元素:\n");
    displaylist(&D);
    initial(&E);
    creatlist(&E);
    printf("输出链表E中的元素:\n");
    displaylist(&D);
    function8(&D,E);
}
2010-03-26 20:50
Cmoniker
Rank: 1
等 级:新手上路
帖 子:14
专家分:5
注 册:2010-3-27
收藏
得分:0 
楼上的幸苦了
2010-03-27 12:42
编程小呆
Rank: 2
来 自:西电
等 级:论坛游民
帖 子:31
专家分:23
注 册:2010-3-20
收藏
得分:0 
貌似功能不齐全吧
2010-03-27 14:17
快速回复:数据结构题目解决!
数据加载中...
 
   



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

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