2008年(35)
分类: C/C++
2008-03-17 10:01:50
/**单链表中每个结点存放一个字符,设计一个算法,将该单链表按字母、数字和其他字符拆成三个单循环链表(利用原有结点)**/
#include "iostream"
using namespace std;
template
struct Node
{
Node(const T& e=T(),Node
T element;
Node
};
template
void append(Node
{
if((*head)->link==NULL)
{
(*rear)=(*temp);
(*head)->link=(*rear);
}
else
{
(*rear)->link=*temp;
(*rear)=(*temp);
}
(*temp)=(*temp)->link;
(*rear)->link=NULL;
}
template
void split(Node
{
Node
temp=(*head)->link;
Node
Node
Node
while(temp!=NULL)
{
if(('0'<=temp->element)&&(temp->element<='9'))
{
append(h1,&rear1,&temp);
}
else if(('a'<=temp->element)&&(temp->element<='z')||('A'<=temp->element)&&(temp->element<='Z'))
{
append(h2,&rear2,&temp);
}
else
{
append(h3,&rear3,&temp);
}
}
}
template
void printList(Node
{
Node
for(temp=head->link;temp!=NULL;temp=temp->link)
{
cout<
}
cout<
Node
{
Node
Node
Node
char c;
char e;
cout<<"input? y/n"<
while(tolower(c)!='n')
{
cin>>e;
p=new Node
if(head->link==NULL)
head->link=p;
else
r->link=p;
r=p;
cout<<"input? y/n"<
}
return head;
}
int main()
{
Node
printList(head);
Node
Node
Node
h1=new Node
h2=new Node
h3=new Node
split(&head,&h1,&h2,&h3);
printList(h1);
printList(h2);
printList(h3);
return 0;
}