「已注销」 2022-12-13 22:32 采纳率: 79.3%
浏览 28
已结题

c语言的集合算法--链表

输入数据后我想以输入字母的方式结束,但是char无法转换int,请问该如何修改并且代码怎么样能简化一下
:两个集合A和集合B,要求设计生成集合C=A∩B的算法,其中集合A、B和C用链式存储结构表示


#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct Lnode
{
    ElemType date;
    struct Lnode* next;
}*LNode;
 
LNode InitLnode(void)                 //初始化链表
{
    LNode L;
    L = (LNode)malloc(sizeof(struct Lnode));
    if(L == NULL)
        exit(1);
    L->next = NULL;    
    return L;
}
 
/*尾插入元素*/
void Insert(LNode head,ElemType x)
{
    struct Lnode *p,*q;
    p = head;
    q = (LNode)malloc(sizeof(struct Lnode));
    if(!q)
    {
        printf("Out of space\n");
        exit(1);
    }
    q->date = x;
    q->next = NULL;
    while(p->next != NULL)  //带头结点的链表
    {
        p = p->next;
    }
    p->next = q;
}
/*输出链表*/
void Print(LNode head)
{
    LNode p;
    p = head->next;
    while(p!=NULL)
    {
        printf("%d ",p->date);
        p = p->next;
    }
}
 
int IfHas(LNode L,ElemType x)
{
    LNode p = L->next;
    if(!L)
        exit(1);
    while(p)
    {
        if(p->date == x)
            return 1;
        p = p->next;
    }
    return 0;
}
 
void REORDER(LNode LA,LNode LB,LNode LC)
{
    LNode p;
    p = LA->next;
    while(p)
    {
        if(IfHas(LB,p->date))
            Insert(LC,p->date);
        p = p->next;
    }
}
 
int main(void)
{
    LNode LA,LB,LC;
    LA = InitLnode();
    LB = InitLnode();
    LC = InitLnode();
    ElemType N;
    printf("输入你要放入链表LA中的数据,输入为end是代表输入结束\n");
    while(scanf("%d",&N)!=EOF)
    {
        if(N == "end" )
            break;
        Insert(LA,N);
    }
    printf("输入你要放入链表LB中的数据,输入为end是代表输入结束\n");
    while(scanf("%d",&N)!=EOF)
    {
        if(N == "end" )
            break;
        Insert(LB,N);
    }
    printf("LA,LB分别为:\nLA:");
    Print(LA);
    printf("\nLB:");
    Print(LB);
    REORDER(LA,LB,LC);
    printf("\nLC:");
    Print(LC);
    printf("\n");
    return 0;
}
  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-12-14 08:19
    关注

    用%s接收输入内容,先判断是否为end,如果是则结束输入,如果不是则将字符串转换为整型,加个函数就行了

    int ToInt(char *s)
    {
        int n=0,i=0;
        while(s[i] != 0)
        {
            n = n*10 + s[i] - '0';
            i++;
        }
        return n;
    }
    int main(void)
    {
        LNode LA,LB,LC;
        LA = InitLnode();
        LB = InitLnode();
        LC = InitLnode();
        char s[100];
        printf("输入你要放入链表LA中的数据,输入为end是代表输入结束\n");
        scanf("%s",s);
        while(strcmp(s,"end") != 0)
        {
            Insert(LA,ToInt(s));
            scanf("%s",s);
        }
        printf("输入你要放入链表LB中的数据,输入为end是代表输入结束\n");
        scanf("%s",s);
        while(strcmp(s,"end") != 0)
        {
            Insert(LB,ToInt(s));
            scanf("%s",s);
        }
        printf("LA,LB分别为:\nLA:");
        Print(LA);
        printf("\nLB:");
        Print(LB);
        REORDER(LA,LB,LC);
        printf("\nLC:");
        Print(LC);
        printf("\n");
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月14日
  • 已采纳回答 12月14日
  • 创建了问题 12月13日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来