ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

判断两个列表是否为对方的排列

2019-03-03 20:02:51  阅读:203  来源: 互联网

标签:链表 排列 字符 ++ str2 str1 List 列表 对方


主要考查链表的应用

题目:若两个链表包含相同的项,项的顺序可不同,则它们被称为对方的排列(若一个列表中某一项有K个,则另一个列表中也应有K个)。如,列表<7e7q>和<qe77>互为排列,而<31425>和<53431>则不是
写一个程序,读入两个列表,判断它们是否为对方的排列

#include<iostream>
#include<stdlib.h> 
#define maxsize 100/*定义字符数组最大长度*/
using namespace std;
typedef struct node *List;/*指向结构体的指针*/
/*结构体*/
struct node{
	char data;/*字符*/
	int count;/*字符数目*/
	List next;/*指针域*/
};
/*尾插法函数*/
void attach(List *rear/*实参应为要更改链表尾指针的地址*/,char n/*要插入结点的字符*/){
	List a;
	a=(List)malloc(sizeof(struct node));
	a->count=1;
	a->data=n;
	a->next=NULL;/*定义一个节点,分配内存,初始化指针域,数据域*/
	(*rear)->next=a;/*修改原尾结点指针域,指向要插入对位的结点*/
	*rear=a;/*更改尾指针*/
}
/*从队头到队尾依次检查新字符是否在链表中出现,如果出现,修改对应字符节点的数目,没出现就插入队尾*/
void create(List ptrl,char n){
	List P;
	P=ptrl;
	while(P){
		if(P->data==n){
			P->count++;
			return;
	    }/*出现,修改对应字符节点数目*/
		else {
			if(P->next)
			P=P->next;
			else break;/*遍历整个链表依然没有出现,退出循环*/
		}
    }
    attach(&P,n);/*将新字符插入链表*/
}


int main(){
	int m;
	List A,B,C;
	char a[maxsize],b[maxsize];
	char *str1,*str2;
	gets(a);
	gets(b);/*使用两个字符数组存储两个字符串*/
	A=(List)malloc(sizeof(struct node));
	B=(List)malloc(sizeof(struct node));
	
	
	str1=&a[0];
	str2=&b[0];
	
	
	attach(&A,*str1);
	str1++;
	
	while(*str1!='\0'){
		create(A,*str1);
		str1++;
	};
			
	attach(&B,*str2);
	str2++;
	while(*str2!='\0'){
		create(B,*str2);
		str2++;
	};/*将两个字符串插入链表*/
	/*判断两个链表是否相同*/
	while(A){
		m=0;/*计数器,用来判断第一个链表中的一个字符是否出现在另一个链表中*/
		C=B;/*遍历链表B*/
		while(C){
			if(A->data==C->data)/*B链表中存在与A链表相同的字符*/{
				m--;
				if(A->count==C->count) break;/*第一个链表中的一个元素在第二个链表中而且数目一样,直接退出,
				判断第一个链表的下一个元素*/
				cout<<"NO"<<endl;/*相同字符的数目不相同,直接判定不同*/
				return 0;
			}
			C=C->next;
		}
		
		if(m==0)/*第一个链表中存在一个元素,第二个链表中不存在,判定不同*/{
		cout<<"NO"<<endl;
		return 0;
		}
		A=A->next;
	}
	cout<<"YES"<<endl;/*整个循环比较完成,相同*/
	return 0;
}

借鉴的一位博主的,现在找不到那位博主的链接了,博主若看到了,还望海涵,,因为写的确实好,所以拿来了。

标签:链表,排列,字符,++,str2,str1,List,列表,对方
来源: https://blog.csdn.net/zhu1534120216/article/details/88092744

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有