构造一个循环链表
存放一个含有三种字符(数字,字母,其他)字符序列
不开辟新空间
将该链表分割成三个循环链表
每个存放一种字符
"head.h"
#include<iostream> #include<ctype.h> #define DIGIT 1 #define ALPHA 2 #define OTHER 3 using namespace std; class NODE { public: char atom; int flag; NODE *next; }; class DATA { public: DATA(); void Constructor(); void PrePrint(); void Process(); void Print(); private: NODE * head,*head1,*head2,*head3,*p,*p1,*p2,*p3; }; DATA::DATA() { head=head1=head2=head3=p=p1=p2=p3=NULL; } void DATA::Constructor() { cout<<"Constructor Called !"<<endl<<endl; bool hasinput=false; char input; while(cin>>input) { if(!hasinput) { head=new NODE; head->atom=input; if(isdigit(input)) head->flag=DIGIT; else if(isalpha(input)) head->flag=ALPHA; else head->flag=OTHER; p=head; hasinput=true; } else { p->next=new NODE; p=p->next; p->atom=input; if(isdigit(input)) p->flag=DIGIT; else if(isalpha(input)) p->flag=ALPHA; else p->flag=OTHER; } } if(!hasinput) { cout<<"No Data Input !"<<endl<<endl; } else { p->next=head; } } void DATA::PrePrint() { cout<<"PrePrint Called !"<<endl<<endl; if(head==NULL) { cout<<"No Data !"<<endl<<endl; return; } p=head; cout<<p->atom<<endl; p=p->next; while(p!=head) { cout<<p->atom<<endl; p=p->next; } cout<<endl; } void DATA::Print() { cout<<"Print Called !"<<endl<<endl; if(head1==NULL) { cout<<"No Data !"<<endl<<endl; } else { p1=head1; cout<<p1->atom<<endl; p1=p1->next; while(p1!=head1) { cout<<p1->atom<<endl; p1=p1->next; } cout<<endl<<endl; } if(head2==NULL) { cout<<"No Data !"<<endl<<endl; } else { p2=head2; cout<<p2->atom<<endl; p2=p2->next; while(p2!=head2) { cout<<p2->atom<<endl; p2=p2->next; } cout<<endl<<endl; } if(head3==NULL) { cout<<"No Data !"<<endl<<endl; } else { p3=head3; cout<<p3->atom<<endl; p3=p3->next; while(p3!=head3) { cout<<p3->atom<<endl; p3=p3->next; } cout<<endl<<endl; } } void DATA::Process() { cout<<"Process Called !"<<endl<<endl; if(head==NULL) { cout<<"No Data !"<<endl<<endl; return; } p1=head1; p2=head2; p3=head3; p=head; while(1) { if(p->flag==DIGIT) { if(p1==NULL) { head1=p; p1=head1; } else { p1->next=p; p1=p1->next; } } else if(p->flag==ALPHA) { if(p2==NULL) { head2=p; p2=head2; } else { p2->next=p; p2=p2->next; } } else { if(p3==NULL) { head3=p; p3=head3; } else { p3->next=p; p3=p3->next; } } p=p->next; if(p==head) { if(p1!=head1) p1->next=head1; if(p2!=head2) p2->next=head2; if(p3!=head3) p3->next=head3; return; } } }
"main.cpp"