已知由一个线性链表表示的线性表中含有 3 类字符的数据元素(如:字母,数字和其他字符),试编写算法将该线性链表分割为 3 个循环链表,其中每个循环链表均只含有一类字符。

匿名 (未验证) 提交于 2019-12-02 23:32:01
版权声明:版权归作者所有 https://blog.csdn.net/mo_chen1025/article/details/90245633

已知由一个线性链表表示的线性表中含有 3 类字符的数据元素(如:字母,数字和其他字符),试编写算法将该线性链表分割为 3 个循环链表,其中每个循环链表均只含有一类字符。

编程要求:
输入:
键盘输入一串字符,含上述的 3 类字符,各类字符数目 5 个以上输出;
屏幕分别打印循环链表 A,B,C 的元素。

# include <stdio.h> # include <stdlib.h>  typedef char ElemType; typedef struct Node { 	ElemType data; 	struct Node *next; }LNode,  *LinkList;  void CreatList(LinkList &L,int m)//依次输入m个数据,并依次建立各个元素结点,逐个插入到链表尾;建立带表头结点的单链表La { 	int i; 	LinkList p,s; 	L=(LinkList)malloc(sizeof(LNode)); 	L->next=NULL; 	p=L; 	if(m!=0) 		printf("请依次输入%d个数据元素:\n",m-1); 	for(i=0;i<m;i++) 	{ 		s=(LinkList)malloc(sizeof(LNode)); 		scanf("%c",&s->data); 		p->next=s; 		p=p->next; 	} 	p->next=NULL; } void CircleList(LinkList &L)//将线性链表变为循环链表 { 	LinkList p; 	int i; 	p=L; 	for(i=0;p->next;i++) 		p=p->next; 	p->next=L; } void ListPrint(LinkList L)//将链表La的数据元素从表头到表尾依次显示 { 	LinkList p; 	int i; 	p=L->next; 	if(!p) 		printf("输出链表失败!\n"); 	for(i=0;p;i++) 	{ 		printf("%c",p->data); 		p=p->next; 	} 	printf("\n"); } void ListInsert(LinkList &L,int i,ElemType e)//在带头结点的单链表L中第i个数据元素之前插入数据元素 { 	LinkList s,p; 	int j; 	p=L; 	for(j=0;p && j<i-1;j++) 		p=p->next; 	if(!p || j>i-1) 		printf("i值错误\n"); 	s=(LinkList)malloc(sizeof(LNode)); 	s->data=e; 	s->next=p->next; 	p->next=s; } void Classify(LinkList L,LinkList &A,LinkList &B,LinkList &C)//将元素分类 { 	LinkList p; 	int i=1,j=1,k=1; 	p=L->next; 	while(p) 	{ 		if( ( (p->data)>64&&(p->data)<91) || ((p->data)>96&&(p->data)<123)) 		{ 			ListInsert(A,i++,p->data); 		} 		else if((p->data)>47 && (p->data)<58) 		{ 			ListInsert(B,j++,p->data); 		} 		else 		{ 			ListInsert(C,k++,p->data); 		} 		p=p->next; 	} } int main() { 	LinkList L,A,B,C; 	int n; 	printf("请输入数据元素个数: "); 	scanf("%d",&n); 	CreatList(L,n+1); 	CreatList(A,0); 	CreatList(B,0); 	CreatList(C,0); 	Classify(L,A,B,C); 	printf("输出字母:\n"); 	ListPrint(A); 	printf("输出数字:\n"); 	ListPrint(B); 	printf("输出符号:"); 	ListPrint(C); 	CircleList(A); 	CircleList(B); 	CircleList(C); 	return 0; } 
文章来源: https://blog.csdn.net/mo_chen1025/article/details/90245633
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!