鎏歌 2022-02-07 22:25 采纳率: 54.5%
浏览 65
已结题

单链表中信息的分类,为什么我的代码没有输出

题目描述
已知L为设有头结点的单链表中第一个结点的指针,每个结点数据域存放一个字符,该字符可能是英文字母字符或数字字符或其他字符。编写程序构造三个以带头结点的单循环链表表示的线性表,使每个表中只含同一类字符,最后输出链表中的信息。

输入
链表中的数据元素;

输出
第一行为数字链表中的信息; 第二行为英文字母字符链表中的信息; 第三行为其它字符链表中的信息。

样例输入
abc123@$12

样例输出
12312
abc
@$


#include<stdlib.h>
#include<stdio.h>
typedef struct LinkNode
{
    char data;          
    struct LinkNode *next;
}LinkNode;

void InitList(LinkNode *&L)
{
    L=(LinkNode*)malloc(sizeof(LinkNode));
    L->next=L;
}

void CreatList(LinkNode *&L,char a[],int n)
{
    LinkNode *s,*r=L;

    for(int i=0;i<n;i++)
    {
        s=(LinkNode*)malloc(sizeof(LinkNode));
        s->data=a[i];
        r->next=s;
        r=s;
    }
    r->next=NULL;
}

//尾插法
void Sort(LinkNode *&L,LinkNode *&L1,LinkNode *&L2,LinkNode *&L3)
{
    LinkNode *p=L->next,*r1=L1,*r2=L2,*r3=L3,*s1,*s2,*s3;
    while(p!=NULL)
    {
        if(p->data>='0'&&p->data<='9')
        {
            s1=(LinkNode*)malloc(sizeof(LinkNode));//为什么这里有malloc 
            s1->data=p->data;//为什么多此一举弄s 
            s1->next=r1->next;
            r1->next=s1;
            r1=s1;
        }
        else if((p->data>='a'&&p->data<='z')||(p->data>='A'&&p->data<='Z'))
        {
            s2=(LinkNode*)malloc(sizeof(LinkNode));
            s2->data=p->data;
            s2->next=r2->next;
            r2->next=s2;
            r2=s2;
        }
        else
        {
            s3=(LinkNode*)malloc(sizeof(LinkNode));
            p->next=r3->next;
            r3->next=p;
            r3=p;
        }
        p=p->next;
    }    
 } 

void DisList(LinkNode *&L)
{
    LinkNode *p=L->next;
    while(p!=NULL)
    {
        printf("%d",p->data);
        p=p->next;
    }
}

int main()
{
    int i;
    LinkNode *L,*L1,*L2,*L3;
    InitList(L);
    InitList(L1);
    InitList(L2);
    InitList(L3);
    char a[i];
    int n;
    for(int i=0;;i++)
    {
        scanf("%d",&a[i]);
        if(a[i]=='\n')  break;
    }
    CreatList(L,a,n);
    Sort(L,L1,L2,L3);
    DisList(L1);
    printf("\n");
    DisList(L2);
    printf("\n");
    DisList(L3);    
    return 0;
}





 
  • 写回答

3条回答 默认 最新

  • orange4reg 2022-02-07 23:34
    关注

    首先 InitList 函数里面的l next应该初始化为null
    其次sort函数里面的else里面的代码也没有写对,再认真想想,else里面等等代码跟上面s1和s2一样的,这两个比较主要,当然输入输出函数里面的%d应该改成%c啦。哇,问题还挺多的,char a[i]这个定义是不对的,编译一下就明白了,还有输入完之后n的值还没初始化啊,要让它等于字符的个数呢。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月16日
  • 已采纳回答 2月8日
  • 创建了问题 2月7日

悬赏问题

  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥66 如何制作支付宝扫码跳转到发红包界面
  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题