0
点赞
收藏
分享

微信扫一扫

SWUST OJ 1039: 单链表中信息的分类

题目描述

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

输入

链表中的数据元素;

输出

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

样例输入

abc123@$12

样例输出

12312
abc
@$

参考程序

#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#define len sizeof(node)
typedef struct node
{
    char data;
    struct node *next;
}node;
void creat(node*&L,char a[],int n)
{
    int i;
    node *p,*q;
    L=(node*)malloc(len);
    p=L;
    for(i=0;i<n;i++)
    {
        q=(node*)malloc(len);
        q->data=a[i];
        p->next=q;
        p=q;
    }
    p->next=NULL;
}
void fenlie(node *L,node *&L1,node *&L2,node *&L3)
{
    node *p=L->next,*p1,*p2,*p3,*q;
    L1=(node*)malloc(len);
    L2=(node*)malloc(len);
    L3=(node*)malloc(len);
    p1=L1;p2=L2;p3=L3;
    while(p!=NULL)
    {
        q=(node*)malloc(len);
        q->data=p->data;
        if(q->data>='0'&&q->data<='9')
        {
            p1->next=q;
            p1=q;
        }
        else if(q->data>='a'&&q->data<='z')
        {
            p2->next=q;
            p2=q;
        }
        else
        {
            p3->next=q;
            p3=q;
        }
        p=p->next;
    }
    p1->next=NULL;
    p2->next=NULL;
    p3->next=NULL;
}
int main()
{
    int n;
    char b[1000];
    node *L,*L1,*L2,*L3;
    scanf("%s",b);
    n=strlen(b);
    creat(L,b,n);
    fenlie(L,L1,L2,L3);
    L1=L1->next;
    L2=L2->next;
    L3=L3->next;
    while(L1!=NULL)
    {
        printf("%c",L1->data);
        L1=L1->next;
    }
    printf("\n");
    while(L2!=NULL)
    {
        printf("%c",L2->data);
        L2=L2->next;
    }
    printf("\n");
    while(L3!=NULL)
    {
        printf("%c",L3->data);
        L3=L3->next;
    }
    printf("\n");
    return 0;
}

注意

该程序仅供学习参考!

举报

相关推荐

0 条评论