「已注销」 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 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效