分解链表,la表中存放字母,lb中存放数字,lc中存放其它字符
2013-06-01 18:10
417 查看
原题:设 head 是没有带头结点的单链表中指向第一个节点的指针,节点的数据域存储一个字符,该字符可能是英文字符或数字或其他字符。编写算法构造三个以带头结点的单循环链表,使每个链表中只停含同一类字符(要求用最少的时间和最少的空间)。
分析:只要顺序扫描链表 head 中的每个结点,根据节点中所含的字符类型分别插入到不同的单循环链表中即可。
分析:只要顺序扫描链表 head 中的每个结点,根据节点中所含的字符类型分别插入到不同的单循环链表中即可。
#include<iostream.h> #include<time.h> #include<stdlib.h> typedef struct LNode //表结点的数据结点 { char data; struct LNode *next; }LNode,*LinkList; int CreateList(LinkList &head) //生成单链表,各表结点中存放一个随机生成的字符 { LinkList p;head=NULL; srand((unsigned)time(NULL)); //随机种子 for(int k=0;k<100;k++) { p=new LNode; //生成结点 p->data=(char)(32+rand()%94); //生成随机字符 if(!head) //如果链表为空,则使 head 头指针指向当前刚生成的结点 { head=p;head->next=NULL; } else //否则,采用头插法将当前生成的结点插入在紧临表头之后的位置 { p->next=head->next;head->next=p; } } return 1; } int DisplayList(LinkList head) //逐个显示链表中的所有结点中的数据 { if(!head) { cout<<"当前链表为空!"<<endl;return -1; } LinkList p=head; while(p->next && p->next!=head) { cout<<p->data<<" -> "; p=p->next; } cout<<p->data<<endl<<endl; return 1; } int Decompose(LinkList &head,LinkList &la,LinkList &lb,LinkList &lc) { //分解链表函数,la表中存放字母,lb中存放数字,lc中存放其它字符 if(!head) { cout<<"当前链表为空,无法分解!"<<endl;return -1; } la=new LNode;lb=new LNode;lc=new LNode; la->next=la;lb->next=lb;lc->next=lc; la->data=lb->data=lc->data='>'; //头结点数据为字符 '>' LinkList p,pa,pb,pc;p=head; pa=la;pb=lb;pc=lc; //pa、pb、pc分别永远指向三个链表的表尾 while(p) { if(p->data>'A'&&p->data<'Z' || p->data>'a'&&p->data<'z') { //p->data为字母 pa->next=p;pa=pa->next; } else if(p->data>'0' && p->data<'9') { //p->data为数字 pb->next=p;pb=pb->next; } else {//p->data为其它字符 pc->next=p;pc=pc->next; } p=p->next; } pa->next=la; //pa为la的尾结点,其后继为头结点la pb->next=lb; //pb为lb的尾结点,其后继为头结点lb pc->next=lc; //pc为lc的尾结点,其后继为头结点lc return 1; } int main() { LinkList head; CreateList(head); DisplayList(head); LinkList la,lb,lc; Decompose(head,la,lb,lc); //调用函数分解链表 cout<<"链表la的数据为:"<<endl; DisplayList(la); cout<<"链表lb的数据为:"<<endl; DisplayList(lb); cout<<"链表lc的数据为:"<<endl; DisplayList(lc); return 1; }
相关文章推荐
- java实现输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
- 输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数
- 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
- android中输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
- 经典c程序(0013)---输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
- 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
- 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
- java统计英文字母、空格、数字和其它字符的数目
- 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
- 经典的100个C算法__(7)统计英文字母、空格、数字和其它字符的个数
- 华为oj 输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数
- 【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
- 统计字符串中的字母,数字,空格和其它字符.
- Console-算法[foreach,if]-一输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
- 笔试题——编写java程序:输入一个字符串,判断有几个英文字母,有几个数字,有几个其它的字符
- 华为OJ题库-输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数
- [华为]输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数
- 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
- 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
- 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。