2-12设 A=(a1,a2,a3,…,am)??和?B=(b1,b2,…,bn)??均为顺序表, ?和 ?分别为A和B中除去最大共同前 缀后的子表。若 =?空表,则A = B?;若A’=空表,而??B’ ≠空表,或者两者均不为空表,且A’ 的首元小于B’的首元,则A<B?;否则A>B?。试写一个比较A,B大小的算法。
算法思想:
![2015年01月02日 - 雨竹清风 - 雨竹清风的博客 2015年01月02日 - 雨竹清风 - 雨竹清风的博客](http://img2.ph.126.net/CKGuc8gEqHhEz15RRaXFmw==/3830874433132411706.jpg)
代码如下:
compare.cpp
#include "compare.h"
#include <iostream>
using namespace std;
compare::compare(void)
{
}
int compare::compareSql(char a1[],char a2[]){//比较数组的大小
int i,j;
for (i=0,j=0;i<6,j<8;i++,j++)
{
if(a1[i]==a2[j]){
continue;
}else if (a1[i]!='\0'&a2[j]!='\0')
{
if(a1[i]>a2[j]){
return 1;//a1大于a2
}else{
return -1;//a1小于a2
}
}
return 0;//a1等于a2
}
}
void compare::coutChar(char a1[],char a2[]){//输出数组中的数据
int i,j=0;
cout<<"数组a1的数为:";
for (i=0;i<6;i++)
{
cout<<a1[i]<<"\t";
}
cout<<endl;
cout<<"数组a2中的数为";
for (i=0;i<7;i++)
{
cout<<a2[i]<<"\t";
}
cout<<endl;
}
compare::~compare(void)
{
}
compare.h
#pragma once
#include <iostream>
using namespace std;
class compare
{
public:
compare(void);
int compareSql(char a1[],char a2[]);
void coutChar(char a1[],char a2[]);
~compare(void);
};
2-12.cpp
#include <iostream>
#include "compare.h"
using namespace std;
int main(){
char a1[7];
char a2[8];
compare com;
cout<<"请输入a1数组的值:";
for(int i=0;i<6;i++){
cin>>a1[i];
}
cout<<"请输入a2数组的值: ";
for(int i=0;i<6;i++){
cin>>a2[i];
}
com.coutChar(a1,a2);
//比较
int flag=com.compareSql(a1,a2);
if (flag==0)
{
cout<<"a1等于a2";
}else if (flag==-1)
{
cout<<"a1小于a2";
}else{
cout<<"a1大于a2";
}
system("pause");
}
方法二:将大于和小于进行合并
int ListComp(SqList A,SqList B)// 比较字符表 A 和 B,并用返回值表示
结果,值为正,表示 A>B; 值为负,表示 A<B; 值为零,表示 A=B
{
for(i=1;A.elem[i]||B.elem[i];i++)
if(A.elem[i]!=B.elem[i]) return A.elem[i]-B.elem[i];
return 0;
}//ListComp