2.33

2.33

 

 

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 typedef struct Node{
 4     char data;
 5     Node*next;
 6 }Node,*LinkList;
 7 Create(LinkList*L)
 8 {
 9     Node*t,*r;
10     char a,b;
11     *L=(LinkList)malloc(sizeof(Node));
12     a=getchar();//要设置两个变量,其中一个负责吞掉间隔符 
13     b=getchar();
14     (*L)->data=a;
15     r=*L; 
16     while(b!='\n')
17     {
18         a=getchar();
19         b=getchar();
20         t=(LinkList)malloc(sizeof(Node));
21         t->data=a;
22         r->next=t;
23         r=t;
24     }
25     r->next=*L;    
26 }
27 Seperate(LinkList L,LinkList*A,LinkList*B,LinkList*C)//先设头指针不存元素,最后再删掉该结点,另设头指针 
28 {
29     Node*l,*a,*b,*c,*t;
30     *A=(LinkList)malloc(sizeof(Node));
31     *B=(LinkList)malloc(sizeof(Node));
32     *C=(LinkList)malloc(sizeof(Node));
33     l=L,a=*A,b=*B,c=*C;
34     
35     while(1)
36     {
37         t=(LinkList)malloc(sizeof(Node));
38         t->data=l->data;
39         if('0'<=l->data&&l->data<='9')
40         {
41             a->next=t;
42             a=t;
43         }
44         else if('a'<=l->data&&l->data<='z')
45         {
46             b->next=t;
47             b=t;
48         }
49         else
50         {
51             c->next=t;
52             c=t;
53         }
54         
55         l=l->next;
56         if(l==L)break;//一次性遍历完L 
57     }
58     a->next=(*A)->next,b->next=(*B)->next,c->next=(*C)->next;
59     *A=a->next,*B=b->next,*C=c->next;    //改变头指针位置,让头指针结点是存放元素的 
60 }
61 Order(LinkList L)
62 {
63     Node*t=L->next;
64     printf("%c ",L->data);
65     while(t!=L)
66     {
67         printf("%c ",t->data);
68         t=t->next;
69     }
70 }
71 int main()
72 {
73     LinkList L,A,B,C;
74     Create(&L);
75     Seperate(L,&A,&B,&C);
76     Order(A);
77     printf("\n");
78     Order(B);
79     printf("\n");
80     Order(C);
81     return 0;
82     
83 }

 

上一篇:C语言中怎样实现动态内存管理


下一篇:C语言内存空间动态分配--实现用户版的malloc