1 //
2 //6_31字符分类
3 //
4 #include <stdio.h>
5 #include <stdlib.h>
6 typedef char datatype;
7 typedef struct node
8 {
9 datatype data;
10 struct node *next;
11 struct node *end;
12 }linklist;
13 linklist *CreatFromE(); //尾插法建立链表
14 linklist *Compat(linklist *L,datatype i); //将数据i粘贴在L的尾部
15 void Show(linklist *L); //显示链表数据
16
17 void main()
18 {
19 linklist *L,*aHead,*bHead,*cHead;
20 L = CreatFromE();
21 aHead = NULL;
22 bHead = NULL;
23 cHead = NULL;
24 while(L)
25 {
26 if((L->data)>='0'&&(L->data)<='9')
27 {
28 aHead = Compat(aHead,L->data);
29 }
30 else if((L->data>='a'&&L->data<='z')||(L->data>='A'&&L->data<='Z'))
31 {
32 bHead = Compat(bHead,L->data);
33 }
34 else
35 {
36 cHead = Compat(cHead,L->data);
37 }
38 L = L->next;
39 }
40 if(aHead != NULL)
41 {
42 aHead->end->next = aHead;
43 Show(aHead);
44 }
45 if(bHead != NULL)
46 {
47 bHead->end->next = bHead;
48 Show(bHead);
49 }
50 if(cHead != NULL)
51 {
52 cHead->end->next = cHead;
53 Show(cHead);
54 }
55 }
56 linklist *CreatFromE()
57 {
58 char ch;
59 linklist *head,*s,*r;
60 head = NULL;
61 r = NULL;
62 printf("请输入字符:/n");
63 ch = getchar();
64 while(ch != '/n')
65 {
66 s = (linklist*)malloc(sizeof(linklist));
67 s->data = ch;
68 if(head == NULL)
69 head = s;
70 else r->next = s;
71
72 r = s;
73 head->end = r;
74 ch = getchar();
75 }
76 if(r != NULL)
77 r->next = NULL;
78 return head;
79 }
80 linklist *Compat(linklist *L,datatype i)
81 {
82 linklist *s;
83 s = (linklist *)malloc(sizeof(linklist));
84 s->data = i;
85 if(L == NULL)
86 L = s;
87 else L->end->next = s;
88 L->end = s;
89
90 return L;
91 }
92 void Show(linklist *L)
93 {
94 linklist *temp;
95 temp = L;
96 while(temp->next != L)
97 {
98 printf("%c/t",temp->data);
99 temp = temp->next;
100 }
101 printf("/n");
102 }