题目描述
已知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;
}
注意
该程序仅供学习参考!