b)c=a;elsec=b;printf("%d",c);(方法二)#includemain(){inta,b,c;scanf("%d," />

经典算法集合

经典算法集合
经典算法集合

经典算法集合

1、求两数和。

#include

main()

{int a,b,sum;

a=1;b=2;

sum=a+b;

printf("sum is %d\n",sum);

}

2、求两数中的大数。

(方法一)

#include

main()

{int a,b,c;

scanf("%d,%d",&a,&b);

if(a>b) c=a;

else c=b;

printf("%d",c);

(方法二)

#include

main()

{int a,b,c;

scanf("%d,%d",&a,&b);

c=max(a,b);

printf("max=%d\n",c);

}

int max(int x,int y)

{int z;

if(x>y)

z=x;

else

z=y;

return(z);}

3、输入a、b、c的值,求最大值。(方法一)

#include

main()

{int a,b,c,max;

scanf("%d,%d,%d",&a,&b,&c); max=a;

if(max

max=b; if(max

max=c;

printf("%d",max);}

(方法二)

#include

main()

{int a,b,c,max;

scanf("%d,%d,%d",&a,&b,&c);

if(a

if(b

printf("max=%d",c);

else

if(a

printf("max=%d",c);

else

printf("max=%d",a);

}

4、输入小写字母,求大写字母。

#include

void main()

{ char a;

printf(“Input a lowercase letter:”);

a = getchar();

a = a-32;

printf(“%c \n”,a);

5、通过键盘输入两数,并对调。

(方法一)

#include

main( )

{int x,y,t;

printf(“input x and y:\n”);

scanf(“%d,%d”,&x,&y);

printf(“x=%d,y=%d”,x,y);

t=x;x=y;y=t;

printf(“x=%d,y=%d\n”,x,y);

}

(方法二)

void swap(int x, int y)

{ int z;

z=x; x=y; y=z;

printf("\nx=%d,y=%d",x ,y);

}

main( )

{ int a= 10,b=20;

swap(a,b);

printf("\na=%d,b=%d\n",a,b);

}

(方法三)

swap(int *x,int *y)

{int t ;

t=*x ;

*x=*y ;

*y=t ;

}

main( )

{int a=3,b=5 ;

swap(&a,&b) ;

printf(“a=%d,b=%d\n”,a,b);}

6、按两数从小到大输出。

#include

main( )

{ float a , b , t ;

printf("input two number:\n") ; scanf("%f%f" , &a , &b) ;

if(a>b)

{t=a ; a=b ; b=t;}

printf("sort:%5.3f , %5.3f" , a , b ) ;

7、求圆的面积和周长。

#include

void main()

{float r,l,s;

scanf("%f",&r);

l = 2*3.14159*r;

s = 3.14159*r*r;

printf("l=%8.4f\n",l);

printf("s=%8.4f\n",s);

8、打印出所有3位数的水仙花。#include

main()

{int i,j,k,n;

for(n=100;n<1000;n++)

{i=n/100; j=n/10-i*10;

k=n%10;

if(n==i*i*i+j*j*j+k*k*k)

printf("%4d",n);

}

printf("\n");

}

9、九九乘法表

#include

main( )

{int i,j;

for(i=1;i<=9;i++)

for(j=1;j<=9;j++)

{printf(“%5d”,i*j);

if(j==9) p rintf(“\n”);

}

}

10、判断键盘输入的整数是否是素数。

#include

main( )

{int ni,nj;

scanf(“%d”,&ni);

for(nj=2;nj

if(ni%nj==0) break;

if(nj>=ni) printf(“%d是素数”,ni);

else printf(“%d是合数”,ni);

}

11、输出3~100以内的素数。

#include

#include

main( )

{int ni,nj;

for(ni=3;ni<=100;ni++)

{for(nj=2;nj

if(ni%nj==0) break;

if(nj>=ni) printf(“\t%d”,ni);

}

}

12、判断两数的最大公约数及最小公倍数。(方法一)

#include

main( )

{int m,n,a,b,r;

scanf(“%d%d”,&m,&n);

a=m;b=n;

do

{r=a%b;

a=b;

b=r;

}

while(b!=0);

printf(“%d,%d is %d\n”,m,n,a);

printf(“%d,%d is %d\n”,m,n,m*n/a);}

(方法二)

#include

main( )

{int m,n,a,b,r,t;

scanf(“%d%d”,&m,&n);

if(m

{t=m;m=n;n=t;}

a=m;b=n;

while(b!=0)

do

{r=a%b;

a=b;

b=r;

}

printf(“%d,%d is %d\n”,m,n,a);

printf(“%d,%d is %d\n”,m,n,m*n/a);}

13、通过键盘输入年份,判断是否闰年。main()

{int year;

printf("Please input the year:\n");

scanf("%d",&year);

if((year%4==0&&year%100!=0)||(year%400==0)) printf("%d is a leap year.\n",year);

else

printf("%d is not a leap year.\n",year);

14、判断输入字符的类别。

#include

main( ) {char c;

printf(“input a character:\n”);

c=getchar( );

if(c<32)

printf(“This is a control character.\n”);

else if(c>=‘0’&&c<=‘9’)

printf(“This is a digit.\n”);

else if(c>=‘A’&&c<=‘Z’)

printf(“This is a capital letter.\n”);

else if(c>=‘a’&&c<=‘z’)

printf(“This is a small letter.\n”);

else

printf(“This is an other characte.\n”);

}

15、求1!+2!...+20!的和。

#include

main( )

{float s=0,t=1;

int n;

for(n=1;n<=20;n++)

{t=t*n;

s=s+t;}

printf(“s=%f”,s) ;}

16、求1+...100的和。

#include

main( )

{int n,s=0;

for(n=1;n<=100;n++)

s=s+n;

printf(“s=%d”,s) ;}

17、求100到200间能被3和7同时整除的数。#indlude

main( )

{int i;

for(i=100;i<=200;i++)

if(i%3==0&&i%7==0) printf(“%5d”,i);

printf(“\n”);}

18、求n的阶成。

#include

main( )

{int n,s=1,i;

scanf("%d",&n);

for(i=1;i<=n;i++)

s=s*i;

printf(“s=%d”,s) ;}

19、求分段函数,当x<0,y=3-x;当x>=0,y=2x。main()

{ float x , y;

scanf(“%f ”, &x);

if ( x <0 ) y = 3 - x ;

else y = 2 * x ;

printf(“y= %6.2f”, y );

}

20、求三角形面积(先判断能否构成三角形)。#include

#include

main()

{int a,b,c;

float s,area;

scanf("%d,%d,%d",&a,&b,&c);

if((a+b>c)&&(a-b)

{s=1.0/2*(a+b+c);

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("area=%f",area);}

else printf("error");}

21、输出100以内的偶数。

#include

main( )

{int n;

for(n=1;n<=100;n++)

{if(n%2!=0)

continue;

printf(“%d “,n);

}

}

22、已知学生分数,判断等级。

(方法一)

main( )

{ int score;

scanf(“%d”, &score);

if ( score>=90)

printf(“等级A\n”);

else if ( score >=80)

printf(“等级B\n”);

else if (score >=70)

printf(“等级C\n”);

else if (score >=60)

printf(“等级D\n”);

else

printf(“等级E\n”);

}

(方法二)

#include

main( )

{ int score;

scanf(“%d” ,&score);

switch (score /10)

{case 10:

case 9: printf("等级A\n");break;

case 8: printf("等级B\n"); break;

case 7: printf("等级C\n");break;

case 6: printf("等级D\n");break;

default: printf("等级E\n"); }

}

23、输出星形图案。

#include

main( )

{ int i,j;

for ( i=1; i<=4; i+=1)

{ for (j=1;j<=4-i; j++)

putchar(‘ ’);

for (j=1;j<=2*i-1;j++ )

putchar(’*’);

printf(“\n”);

}

}

24、求圆周率的值。

#include

#include

{int s=1;

float n=1,t=1,pi=0;

while(fabs(t)>=1e-6)

{pi=pi+t;

n=n+2;

s=-s;

t=s/n;

}

pi=4*pi;

printf(“%f\n”,pi);

}

25、求Fibonacci数列前40项。f1=1

f2=1

fn=fn-1+fn-2(n>=3)

(方法一)

#include

main( )

{int i;

long f[40]={1,1};

for(i=2;i<40;i++)

f[i]=f[i-2]+f[i-1];

for(i=0;i<40;i++)

{if(i%4==0) printf(“\n”);

printf(“%12ld”,f[i]);

}

}

(方法二)

#include

main( )

{long f1,f2;

f1=1;f2=1;

for(i=1;i<=20;i++)

{printf(“%12ld %12ld”,f1,f2);

if(i%2==0) printf(“\n”);

f1=f1+f2;

f2=f2+f1;

}

}

26、反序输出。

(方法一)

#include

main( )

{int i,a[10];

for(i=0;i<=9;i++)

a[i]=i;

for(i=9;i>=0;i--)

printf(“%d ”,a[i]);

printf(“\n”);

}

(方法二)

#include

main( )

{int i,a[10],t;

for(i=0;i<=9;i++)

scanf(“%d”,&a[i]);

i=0;

j=9;

while(i

{t=a[i];a[i]=a[j];a[j]=t;

i++;

j--;}

for(i=0;i<=9;i++)

printf(“%d”, a[i]);

printf(“\n”);

}

27、猴子吃桃问题。

#cinclude

main( )

{int p1,p2=1;

int n=9;

while(n>0)

{

p1=2*(p2+1);

p2=p1;

n--;

}

printf(“the total is %d\n”,p1);

}

28、百马百担问题。

#include

main()

{int a,b,c;

for(a=0;a<=33;a++)

for(b=0;b<=50;b++)

for(c=0;c<=100;c+=2)

if((a+b+c==100)&&(3*a+2*b+c/2==100))

printf(“a is %d,b is %d,c is %d\n”,a,b,c);} 29、冒泡法对10个数从小到大排序。

main( )

{int a[11];

int i,j,t;

printf(“Enter 10 numbers\n”);

for(i=1;i<11;i++)

scanf(“%d”,&a[i]);

printf(“\n”);

for(j=1;j<=9;j++)

for(i=1;i<=10-j;i++)

if(a[i]>a[i+1])

{t=a[i];a[i]=a[i+1];a[i+1]=t;}

printf(“The sorted numbers”\n”);

for(i=1;i<11;i++)

printf(“%d”,a[i]);

}

30、使用选择排序法将数组a中的10个整数按升序排列并输出。

#include

main()

{int i,a[10],j,t;

printf("input 10 numbers:\n");

for(i=0;i<10;i++)

scanf("%d",&a[i]);

for(i=0;i<9;i++)

{for(j=i+1;j<10;j++)

if(a[j]

{t=a[j];a[j]=a[i];a[i]=t;}}

for(i=0;i<10;i++)

printf("%3d",a[i]);

}

31、二维数组的输入输出。

main

{int a[3][3],i,j;

for (i=0;i<=2;i++)

for (j=0;j<=2;j++)

scanf(“%d”, &a[i][j]);

for (i=0;i<=2;i++)

{for (j=0;j<=2;j++)

printf(“%2d”,a[i][j]);

printf(“\n”);

}

}

32、转置矩阵。

#include

main( )

{int i,j;

int a[2][3]={1,2,3,4,5,6},b[3][2];

for (i=0;i<2;i++)

for(j=0;j<3;j++)

b[j][i]=a[i][j];

for(i=0;i<3;i++)

{for(j=0;j<2;j++)

printf(“%6d”,b[i][j]);

printf(“\n”);

}

}

33、求主对角线的和。

#include

main( )

{int a[5][5],sum=0;

int i, j;

for(i=0;i<5;++i)

for(j=0;j<5;++j)

scanf("%d",&a[i][j]);

for(i=0;i<5;++i)

sum+=a[i][i];

printf("%d\n",sum);}

34、求3×3矩阵的两条对角线元素之和。#include

main( )

{int a[3][3],sum=0;

int i, j;

for(i=0;i<3;++i)

for(j=0;j<3;++j)

scanf("%d",&a[i][j]);

for(i=0;i<3;++i)

sum=sum+a[i][i]+a[i][2-i];

printf("%d\n",sum);}

35、打印杨辉三角。

#include

#define N 7

main( )

{int i,j,a[N][N];

for(i=1;i

{a[i][i]=1;

a[i][1]=1;}

for(i=3;i

for(j=2;j<=i-1;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=1;i

{for(j=1;j<=i;j++)

printf("%6d",a[i][j]);

printf("\n");

}

printf("\n");

}

36、不用strcat函数,连接两个字符串。

#include

main( )

{char s1[80],s2[40];

int i=0,j=0;

printf(“input string1:”);

scanf(“%s”,s1);

printf(“input string2:”);

scanf(“%s”,s2);

while(s1[i]!=‘\0)

i++;

while(s2[j]!=‘\0’)

s1[i++]=s2[j++];

s1[i]=‘\0’;

printf(“The new string is:%s”,s1);

}

37、判断一个整数数组中各元素的值,若大于0则输出该值;若小于0则输出0。void test(int x)

{ printf(“%d”,(x>0)?x:0);

}

main( )

{ int a[5],i;

printf(“input 5 numbers\n”);

for (i=0;i<5;i++)

{scanf(“%d”,&a[i]);

test (a[i]);

}

}

38、输入一个学生的5门课程的成绩,求平均成绩。

float aver (float a[5])

{ int i;

float s=a[0];

for(i=1;i<5;i++) s=s+a[i];

s=s/5;

return s;

}

void main( )

{ float sco[5],av;

int i;

printf(“\n input 5 scores:\n”);

for(i=0;i<5;i++)

scanf(“%f”,&sco[i]);

av=aver(sco);

printf(“average scor is %5.2f”,av);

}

39、递归方法求n!

long fac( int n)

{long f;

if (n==0)

f=1;

else

f=n* fac(n-1);

return f;

}

main( )

{long y;

int n;

scanf(“%d”,&n);

y=fac(n);

printf(“%d!=%ld”,n,y);

}

40、求1!+2!+3!+4!+5!。

long f2(int q)

{ long c=1;

int i;

for(i=1;i<=q;i++) c=c*i;

return c;

}

main( )

{ int i;

long s=0;

for(i=1;i<=5;i++) s=s+f2(i);

printf(“\n s=%ld\n”,s);

}

41、编写函数将字符串s中的字符存放到t串中,然后把s中的字符按逆序连接到t串后面。

#include

void f(char s[ ],char t[ ])

{int i,s1;

s1=strlen(s);

for(i=0;i

t[i]=s[i];

for(i=0;i

t[s1+i]=s[s1-i-1];

t[s1+i]=‘\0’;

}

main( )

{char s[100 ],char t[ 100]);

printf(“pleasw enter string s:\n”);

scanf(“%s”,s);

f(s,t);

printf(“The result is:%s\n”,t);

}

42、求长宽高为3,4,5的长方体体积。

int l=7,w=4,h=5;

int vol(int l,int w)

{int v;

v=l*w*h;

return v;

}

main( )

{int l=3;

printf(“v=%d”,vol(l,w);}

43、分析程序,看结果。

f(a)

int a; {auto int b=0;

static int c=3;

b=b+1;

c=c+1;

return(a+b+c);

}

main( )

{int a=2,i;

for(i=0;i<3;i++)

printf(“%d”,f(a));

}

结果:7 8 9

44、删除字符串中某字符。

#include

char s[ ]=”this,is,string”;

main( )

{char c=’,’;

printf(“%s\n”,s);

sze(s,c);

printf(“%s\n”,s);

}

void sze(dar s[ ],int c)

{int i,j;

for(i=j=0;s[i]!=’\0’;++i)

if(s[i]!=c)

s[j++]=s[i];

s[j]=’\0’;

}

结果:thisisstring

45、实现两个字符串字符复制。

main( )

{char x[10],y[10];

char *s,*t;

s=x;t=y;

printf(?Enter a string(less than 10 charaters):\n ?); scanf(“%s”,t);

while(*s++=*t++);

printf(“copied string=\n%s\n”,x);

}

46、输出字符串中第n个字符后的所有字符。main( )

{char *ps=”This is a test string”;

int n;

printf(“n=”);

scanf(“%d”,&n);

ps=ps+n;

printf(“%s\n“,ps);

}

47、在输入的字符串中查找有无’k’字符。

main( )

{char str[80],*ps;

int i;

ps=str;

printf(“input a string:\n”); scanf(“%s”,ps);

for(i=0;str[i]!=’\0’;i++)

if(str[i]==’k’)

{printf(“There is a ’k’ in the string\n”);

break;}

if(str[i]==’\0’) printf(“There is no ‘k’ in the string\n”);}

48、从键盘输入一个字符串判断是否是“回文”。#include

#include

main( )

{char str[60];

int i,j;

gets(str);

i=0;j=strlen(str)-1;

while(str[i]==’‘) i++;

while(str[j]==’‘) j++;

while(i

{i++;j--;}

if(i

else printf(“Yes\n”);

}

49、输出二维数组a的每个元素。

#include

main( )

{static int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};

int (*p)[4],i,j;

p=a;

for(i=0;i<3;i++)

for(j=0;j<4;j++)

printf(“%d”,*(*(p+i)+j));

}

50、执行程序看结果。

main( )

{struct student

{int stuno;

char name[20];

float score;

}stu1={9701,”Wang Bing”,84.5},*pstu;

pstu=&stu1;

printf(“No:%d,Name:%s,Score=%f\n”,stu1.stuno,st https://www.360docs.net/doc/3818606687.html,,stu1.score);

printf(“No:%d,Name:%s,Score=%f\n”,(*pstu).stuno, (*pstu).name, (*pstu).score);

printf(“No:%d,Name:%s,Score=%f\n”,pstu->stuno, pstu->name, pstu->score);

}

结果:

NO:9701,Name:Wang Bing,Score=84.500000 NO:9701,Name:Wang Bing,Score=84.500000 NO:9701,Name:Wang Bing,Score=84.500000

51、分析程序看结果。

#define MULT1(a,b) a*b

#define MULT2(a,b) (a)*(b)

main( )

{int x,y;

x=MULT1(3+2,5+8);

y=MULT2(3+2,5+8);

printf(“x=%d,y=%d”,x,y);

}

结果:x=21,y=65

52、求下面s的值(前50项和)

s=1/3-(2/5)+(3/7)-(4/9)+(5/11)......(49/99)-(50/101)

#include

main()

{

float s=0,j;

int i;

for (i=1;i<=50;i++)

{ j=i;

if(i%2!=0) s=s+j/(2*j+1);

else s=s-j/(2*j+1);

}

53、利用循环语句求s前20项和

s=1/(1*2*3)-1/(2*3*4)+1/(3*4*5)...+1/(19*20*21)-1/( 20*21*22)

#include

main()

{

int i;

float s=0;

i=1;

while(i<=20)

{if(i%2!=0)

s=s+1.0/(i*(i+1)*(i+2));

else

s=s-1.0/(i*(i+1)*(i+2));

i++;

}

printf("%f\n",s);

}

54、根据下列公式,计算A30的值。

A1=1,A2=1,A3=3/(A2+A1),A4=4/(A3+A2)...A30=30 /(A29+A28)

#include

main( )

{float s,a[31];

int i;

a[1]=1;a[2]=1;

for(i=3;i<=30;i++)

a[i]=i/(a[i-1]+a[i-2]);

s=a[30];

printf("A30=%f",s);

}

产品集成方案

目录 1产品集成计划 ............................................... 目的 .......................................................... 适用范围 ...................................................... 参考文件 ...................................................... 职责 .......................................................... 集成环境说明 .................................................. 产品集成进度 .................................................. 产品集成顺序 .................................................. 产品集成备选顺序 .............................................. 产品集成规程 .................................................. 2产品集成方案 ............................................... 2.1 ................................................................................................. 集成策略 ......................................................................................................... 资源.22 2.2.1 ................................................. 集成测试过程角色职责映射表

产品集成方案模板

目录

1.目的 编写此文件的目的。 2.适用范围 指明本文件的预期应用范围。 3.参考文件 4.职责 [在具体的产品集成计划中应给出明确的人员名单及相应的角色、职责映射。开发经理、部门经理、开发工程师、配置工程师可相应承担这样的角色。]

5.集成环境说明 [ 描述集成的硬件设备环境、网络通信环境、集成支持平台环境、集成支持工具等。 ] 说明集成环境配置以及维护的注意事项。如果为硬件集成,则需说明环境方面所应采取的安全措施,例如对静电场和磁场的考虑。 6.产品集成进度 [ 集成时间表与集成策略相对应,明确在集成阶段里什么时间由集成单元负责人集成其负责的集成单元。集成过程时间表应依从项目计划中给出的集成时间表。]

说明产品集成的时间进度,及工作安排。 7.产品集成顺序 说明产品集成顺序,可使用Visio绘制。在中英文混排时,英文部分一定要用英文输入,不能采用中文输入的英文字母。流程图用Visio 绘制完成后,在WORD中采用选择性粘贴“增强型图元文件Picture (Enhanced Metafile)”的形式粘贴到Word文件中。 8.产品集成备选顺序 说明产品备选集成顺序和备选的组件,以及采用备选集成顺序的条件。

集成策略 [不论是采用结构化或面向对象方法设计实现的系统,它们的集成一般是一个递增的过程,集成策略中的主要内容是集成单元的集成顺序和接口定义。 接口定义是描述集成单元应遵守的共同约定,例如采用构件构造系统,集成单元应遵循构件系统规范(COM/DCOM/CORBAR/OMS等)。 集成顺序是集成单元的先后顺序,如哪些部分采用自顶向下集成,哪些部分测试自底向上集成,这取决于需求定义、系统体系结构等因素。 集成测试是把经过单元测试的模块放在一起形成一个功能模块或子系统来测试。着重测试模块的接口以及集成后的功能。] 9.产品集成规程 说明产品集成时注意事项。如果为硬件集成,则需说明集成方面所应采取的安全措施,例如对静电场和磁场的考虑。组织的集成步骤、及判别一个组件是否集成成功的标准。 交付的工作产品

JAVA中常用的集合类型

JAVA常用的高级数据类型——集合类型 一、JAVA语言中的集合类型主要有三种形式:Set(集)、List(列表)、Map(映射),每种类型的集合都包括三部分:接口、实现和算法。 a)集合接口实现集合的操作和集合的具体功能实现细节的相互分离—— Set接口、List接口、Map接口 b)集合的具体功能实现类实质上是各种可重用的数据结构的具体表示 List接口的实现类有ArrayList、LinkedList、Stack和Vector等 集合类,Vector 类提供了实现可增长数组的功能,随着更多元素加 入其中,数组变的更大。在删除一些元素之后,数组变小。 Set接口的实现类有HashSet、LinkedHashSet和TreeSet等集合类 Map接口的实现类有HashMap、Hashtable、LinkedHashMap、Properties和TreeMap等集合类。 c)集合的算法指可以对实现集合接口的各个集合的功能实现类提供如排 序、查找、交换和置换等方面的功能实现。 二、List接口 1.List接口代表有序的集合,可以对List接口代表的有序集合中每个元素 的插入位置进行精确地控制,并利用元素的整数索引(代表元素在集合中的位置)访问元素中的各个成员,List接口代表的集合是允许出现重复元素的。 2.List接口主要成员方法: 1)void add(int index,E element)在列表指定位置插入指定元素 2)E get(int index) 返回结合中指定位置的元素 3)E remove(int index) 移除集合中指定位置的元素 4)E set(int index,E elment) 用指定元素替换集合中指定位置的元素 5)boolean add(E o) 向列表的尾部追加指定的元素 6)boolean contains(Object o) 如果列表包含指定的元素,则返回true。 7)boolean isEmpty() 如果列表不包含元素,则返回 true。 8)int size() 返回列表中的元素数 9)Iterator iterator()返回以正确顺序在列表的元素上进行迭代的迭代器。 3.List的实现类 List在数据结构中分别表现为数组(ArrayList)、向量(Vector)、链表(LinkedList)、堆栈(Stack)和队列等形式。 Vector集合和ArrayList集合都是采用数组形式来保存对象,区别在于ArrayList集合本身不具有线程同步的特性,不能用在多线程的环境下,可以使用ArrayList集合能够节省由于同步而产生的系统性能的开销。而Vector集合实现了对线程同步的支持,因此在多线程并发访问的应用环境下,该集合本身能够保证自身具有线程安全性。在多线程的并发访问中,可以将Vector集合的对象实例设计为类中的成员属性,而应该将ArrayList 集合的对象实例设计为局部对象。 public class UserInfo{ List oneVector=new Vector(); public void execute(){

最大流的增广路算法(KM算法).

1459:Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 17697 Accepted: 9349 Description A power network consists of nodes (power stations, consumers and dispatchers) connected by power transport lines. A node u may be supplied with an amount s(u) >= 0 of power, may produce an amount 0 <= p(u) <= p max(u) of power, may consume an amount 0 <= c(u) <= min(s(u),c max(u)) of power, and may deliver an amount d(u)=s(u)+p(u)-c(u) of power. The following restrictions apply: c(u)=0 for any power station, p(u)=0 for any consumer, and p(u)=c(u)=0 for any dispatcher. There is at most one power transport line (u,v) from a node u to a node v in the net; it transports an amount 0 <= l(u,v) <= l max(u,v) of power delivered by u to v. Let Con=Σu c(u) be the power consumed in the net. The problem is to compute the maximum value of Con. An example is in figure 1. The label x/y of power station u shows that p(u)=x and p max(u)=y. The label x/y of consumer u shows that c(u)=x and c max(u)=y. The label x/y of power transport line (u,v) shows that l(u,v)=x and l max(u,v)=y. The power consumed is Con=6. Notice that there are other possible states of the network but the value of Con cannot exceed 6. Input There are several data sets in the input. Each data set encodes a power network. It starts with four integers: 0 <= n <= 100 (nodes), 0 <= np <= n (power stations), 0 <= nc <= n (consumers), and 0 <= m <= n^2 (power transport lines). Follow m data triplets (u,v)z, where u and v are node identifiers (starting from 0) and 0 <= z <= 1000 is the value of l max(u,v). Follow np doublets (u)z, where u is the identifier of a power station and 0 <= z <= 10000 is the value of p max(u). The data set ends with nc doublets (u)z, where u is the identifier of a consumer and 0 <= z <= 10000 is the value of

算法分析与设计(最大流问题)

算法分析与设计题目:最大流算法 院系:软件工程 班级:软件11-2班 姓名:慕永利 学号:23 号

目录 1算法提出背景............................................................................................................................- 3 - 2 问题实例及解决.......................................................................................................................- 3 - 3算法论述....................................................................................................................................- 4 - 3.1、可行流..........................................................................................................................- 4 - 3.2 最大流..........................................................................................................................- 5 - 3.3最大流算法.....................................................................................................................- 6 - 3.3.1 增广路径.......................................................................................................- 6 - 3.3.2沿增广路径增广..................................................................................................- 7 - 3.3.3样例:..................................................................................................................- 8 - 3.3.4定理:............................................................................................................... - 13 - 3.3.5算法的实现:................................................................................................... - 13 - 3.3.6 优化.................................................................................................................. - 16 - 4算法应用................................................................................................................................. - 18 -

数据挖掘分类算法比较

数据挖掘分类算法比较 分类是数据挖掘、机器学习和模式识别中一个重要的研究领域。通过对当前数据挖掘中具有代表性的优秀分类算法进行分析和比较,总结出了各种算法的特性,为使用者选择算法或研究者改进算法提供了依据。 一、决策树(Decision Trees) 决策树的优点: 1、决策树易于理解和解释.人们在通过解释后都有能力去理解决策树所表达的意义。 2、对于决策树,数据的准备往往是简单或者是不必要的.其他的技术往往要求先把数据一般化,比如去掉多余的或者空白的属性。 3、能够同时处理数据型和常规型属性。其他的技术往往要求数据属性的单一。 4、决策树是一个白盒模型。如果给定一个观察的模型,那么根据所产生的决策树很容易推出相应的逻辑表达式。 5、易于通过静态测试来对模型进行评测。表示有可能测量该模型的可信度。 6、在相对短的时间内能够对大型数据源做出可行且效果良好的结果。 7、可以对有许多属性的数据集构造决策树。 8、决策树可很好地扩展到大型数据库中,同时它的大小独立于数据库的大小。 决策树的缺点: 1、对于那些各类别样本数量不一致的数据,在决策树当中,信息增益的结果偏向于那些具有更多数值的特征。 2、决策树处理缺失数据时的困难。 3、过度拟合问题的出现。 4、忽略数据集中属性之间的相关性。 二、人工神经网络 人工神经网络的优点:分类的准确度高,并行分布处理能力强,分布存储及学习能力强,对噪声神经有较强的鲁棒性和容错能力,能充分逼近复杂的非线性关系,具备联想记忆的功能等。 人工神经网络的缺点:神经网络需要大量的参数,如网络拓扑结构、权值和阈值的初始值;不能观察之间的学习过程,输出结果难以解释,会影响到结果的可信度和可接受程度;学习时间过长,甚至可能达不到学习的目的。

(完整word版)系统集成及分类

系统集成 科技名词定义 中文名称:系统集成 英文名称:system integration 定义:将不同的系统,根据应用需要,有机地组合成一个一体化的、功能更加强大的新型系统的过程和方法。 所属学科:测绘学(一级学科);摄影测量与遥感学(二级学科) 本内容由全国科学技术名词审定委员会审定公布 系统集成是在系统工程科学方法的指导下,根据用户需求,优选各种技术和产品,将各个分离的子系统连接成为一个完整可靠经济和有效的整体,并使之能彼此协调工作,发挥整体效益,达到整体性能最优。 目录 概念 新兴的服务方式 从业人员素质要求 特点 系统集成商的发展 系统集成分类 概念 新兴的服务方式 从业人员素质要求 特点 系统集成商的发展 系统集成分类 展开

所谓系统集成(SI,System Integration),就是通过结构化的综合布线系统和计算机网络技术,将各个分离的设备(如个人电脑)、功能和信息等集成到相互关联的、统一和协调的系统之中,使资源达到充分共享,实现集中、高效、便利的管理。系统集成应采用功能集成、网络集成、软件界面集成等多种集成技术。系统集成实现的关键在于解决系统之间的互连和互操作性问题,它是一个多厂商、多协议和面向各种应用的体系结构。这需要解决各类设备、子系统间的接口、协议、系统平台、应用软件等与子系统、建筑环境、施工配合、组织管理和人员配备相关的一切面向集成的问题。 新兴的服务方式 系统集成作为一种新兴的服务方式,是近年来国际信息服务业中发展势头最猛的一个行业。系统集成的本质就是最优化的综合统筹设计,一个大型的综合计算机网络系统,系统集成包括计算机软件、硬件、操作系统技术、数据库技术、网络通讯技术等的集成,以及不同厂家产品选型,搭配的集成,系统集成所要达到的目标-整体性能最优,即所有部件和成分合在一起后不但能工作,而且全系统是低成本的、高效率的、性能匀称的、可扩充性和可维护的系统,为了达到此目标,系统集成商的优劣是至关重要的。 从业人员素质要求 这就对系统集成技术人员提出了很高的要求:不仅要精通各个厂商的产品和技术,能够提出系统模式和技术解决方案。更要对用户的业务模式、组织结构等有较好的理解。同时还要能够用现代工程学和项目管理的方式,对信息系统各个流程进行统一的进程和质量控制,并提供完善的服务。 特点 系统集成有以下几个显著特点: 1:系统集成要以满足用户的需求为根本出发点。 2:系统集成不是选择最好的产品的简单行为,而是要选择最适合用户的需求和投资规模的产品和技术。 3:系统集成不是简单的设备供货,它体现更多的是设计、调试与开发的技术和能力。 4:系统集成包含技术、管理和商务等方面,是一项综合性的系统工程。技术是系统集成工作的核心,管理和商务活动是系统集成项目成功实施的可靠保障。 5:性能性价比的高低是评价一个系统集成项目设计是否合理和实施是否成功的重要参考因素。

最新C语言常用算法集合汇总

C语言常用算法集合

1.定积分近似计算: /*梯形法*/ double integral(double a,double b,long n) { long i;double s,h,x; h=(b-a)/n; s=h*(f(a)+f(b))/2; x=a; for(i=1;i

if(n==1||n==2) *s=1; else{ fib(n-1,&f1); fib(n-2,&f2); *s=f1+f2; } } 3.素数的判断: /*方法一*/ for (t=1,i=2;i0;n/=10) k=10*k+n%10; return k; } /*求回文数*/

集成电路分类及其特点

时间:2014春季学期班级:1208101 学号:1120810102 姓名:王云 集成电路分类及其特点 摘要:集成电路根据不同的功能用途分为模拟和数字两大类别,而具体功能更是数不胜数,其应用遍及人类生活的方方面面。集成电路根据内部的集成度分为大规模、中规模、小规模三类。其封装也有许多形式:“双列直插”和“单列直插”的最为常见。消费类电子产品中用软封装的IC,精密产品中用贴片封装的IC等。对于CMOS型IC,特别要注意防止静电击穿IC,最好也不要用未接地的电烙铁焊接。集成电路型号众多,随着技术的发展,又有更多的功能更强、集成度更高的集成电路涌现,为电子产品的生产制作带来了方便。 关键词:集成电路 分类 特点 发展趋势 关键技术 一、概述 集成电路(integrated circuit)是一种微型电子器件或部件。采用一定的工艺,把一个电路中所需的晶体管、二极管、电阻、电容和电感等元件及布线互连一起,制作在一小块或几小块半导体晶片或介质基片上,然后封装在一个管壳内,成为具有所需电路功能的微型结构;其中所有元件在结构上已组成一个整体,使电子元件向着微小型化、低功耗、智能化和和高可靠性方面迈进了一大步。它在电路中用字母“IC”表示。 集成电路发明者为杰克·基尔比--基于锗的集成电路 和罗伯特·诺伊思--基于硅的集成电路(当今半导体工业大多数应用的是基于硅的集成电路)。仅仅在其开发后半个世纪,集成电路变得无处不在,电脑,手机和其他数字电器成为现代社会结构不可缺少的一部分。这是因为,现代计算,交流,制造和交通系统,包括互联网,全都依赖于集成电路的存在。甚至很多学者认为有集成电路带来的数字革命是人类历史中最重要的事件。 二、分类及其特点 集成电路有很多种分类方法,常见的有以下几种: 1. 按使用功能分类 按使用功能主要分为模拟集成电路和数字集成电路两大类别。 (1)模拟集成电路。 模拟集成电路又称线性电路,用来产生、放大和处理各种模拟信号(指幅度随时间变化的信号。例如半导体收音机的音频信号、录放机的磁带信号等),其输入信号和输出信号成比例关系。主要有集成稳压器、运算放大器、功率放大器及专用集成电路等。其主要类型如下图1:

机器学习实战之分类算法

机器学习实战之分类算法 第一章机器学习概论 (4) 机器学习基本概念 (4) 机器学习的主要任务以及相应的算法 (4) 如何选择合适的算法? (4) 机器学习应用的步骤 (5) 第二章 K近邻算法(KNN) (5) 工作原理 (5) 实现步骤 (6) K近邻算法的优缺点 (6) 第三章决策树 (7) 基本思路 (7) 集合无序程度测量 (7) 应用场景 (7) 优缺点 (7) 第四章朴素贝叶斯分类 (8) 基本思路 (8) 基本假设 (8) 条件概率 (8) 词袋模型和词集模型 (9) 优缺点 (10) 标称型和数值型数据的区别 (10)

主要应用及步骤 (10) 第五章逻辑回归 (12) 基本思想 (12) 使用场景 (12) 优缺点 (12) Sigmoid函数 (13) 回归系数 (13) 梯度上升法 (14) 特征缺失处理 (14) 标签缺失处理 (14) 第六章支持向量机SVM (14) 基本思想 (14) SVM第一层理解 (15) 超平面的确定 (15) 函数间隔和几何间隔 (15) 最大间隔分类器 (16) SMO优化算法 (16) 核函数 (19) 应用场景 (19) 第七章 AdaBoost分类 (19) Bagging (20) Boosting (20) Adaboost (20) Adaboost的优点 (20)

Adaboost实现步骤 (21) 第八章非均衡分类问题 (23) 分类性能指标 (23) 混淆矩阵 (23) ROC曲线 (24) 处理非均衡问题的数据抽样 (24)

第一章机器学习概论 机器学习基本概念 机器学习就是将无序的数据转化为有用的信息。一个实例有n个特征,由n列组成。机器学习最主要的任务就是分类,另一个就是回归,回归中比较典型的就是线性拟合。分类和回归都属于监督学习,因为这类算法必须知道要预测什么,即已知目标变量的分类信息。与监督学习对应的是无监督学习,此时数据没有类别信息,也不会给定目标值,将数据集合分成由类似的对象组成的多个类的过程叫做聚类。将描述数据统计值的过程称之为密度估计。分类首先要进行训练,训练样本集必须确定目标变量的值,以便发现特征与目标变量之间的关系。特征或者属性通常是训练样本集的列,他们是独立测量得到的结果,多个特征联系在一起共同组成一个训练样本。 机器学习的主要任务以及相应的算法 如何选择合适的算法? 如果要预测目标变量的值:

数字集成电路的分类

数字集成电路的分类 数字集成电路有多种分类方法,以下是几种常用的分类方法。 1.按结构工艺分 按结构工艺分类,数字集成电路可以分为厚膜集成电路、薄膜集成电路、混合集成电路、半导体集成电路四大类。图如下所示。 世界上生产最多、使用最多的为半导体集成电路。半导体数字集成电路(以下简称数字集成电路)主要分为TTL、CMOS、ECL三大类。 ECL、TTL为双极型集成电路,构成的基本元器件为双极型半导体器件,其主要特点是速度快、负载能力强,但功耗较大、集成度较低。双极型集成电路主要有TTL(Transistor-Transistor Logic)电路、ECL(Emitter Coupled Logic)电路和I2L(Integrated Injection Logic)电路等类型。其中TTL电路的性能价格比最佳,故应用最广泛。

ECL,即发射极耦合逻辑电路,也称电流开关型逻辑电路。它是利用运放原理通过晶体管射极耦合实现的门电路。在所有数字电路中,它工作速度最高,其平均延迟时间tpd可小至1ns。这种门电路输出阻抗低,负载能力强。它的主要缺点是抗干扰能力差,电路功耗大。 MOS电路为单极型集成电路,又称为MOS集成电路,它采用金属-氧化物半导体场效应管(Metal Oxide Semi-conductor Field Effect Transistor,缩写为MOSFET)制造,其主要特点是结构简单、制造方便、集成度高、功耗低,但速度较慢。MOS集成电路又分为PMOS(P-channel Metal Oxide Semiconductor,P沟道金属氧化物半导体)、NMOS(N-channel Metal Oxide Semiconductor,N沟道金属氧化物半导体)和CMOS(Complement Metal Oxide Semiconductor,复合互补金属氧化物半导体)等类型。 MOS电路中应用最广泛的为CMOS电路,CMOS数字电路中,应用最广泛的为4000、4500系列,它不但适用于通用逻辑电路的设计,而且综合性能也很好,它与TTL电路一起成为数字集成电路中两大主流产品。CMOS数字集成电路电路主要分为4000(4500系列)系列、54HC/74HC系列、54HCT/74HCT系列等,实际上这三大系列之间的引脚功能、排列顺序是相同的,只是某些参数不同而已。例如,74HC4017与CD4017为功能相同、引脚排列相同的电路,前者的工作速度高,工作电源电压低。4000系列中目前最常用的是B 系列,它采用了硅栅工艺和双缓冲输出结构。 Bi-CMOS是双极型CMOS(Bipolar-CMOS)电路的简称,这种门电路的特点是逻辑部分采用CMOS结构,输出级采用双极型三极管,因此兼有CMOS电路的低功耗和双极型电路输出阻抗低的优点。 (1)TTL类型 这类集成电路是以双极型晶体管(即通常所说的晶体管)为开关元件,输入级采用多发射极晶体管形式,开关放大电路也都是由晶体管构成,所以称为晶体管-晶体管-逻辑,即Transistor-Transistor-Logic,缩写为TTL。TTL电路在速度和功耗方面,都处于现代数字集成电路的中等水平。它的品种丰富、互换性强,一般均以74(民用)或54(军用)为型号前缀。 ①74LS系列(简称LS,LSTTL等)。这是现代TTL类型的主要应用产品系列,也是逻辑集成电路的重要产品之一。其主要特点是功耗低、品种多、价格便宜。 ②74S系列(简称S,STTL等)。这是TTL的高速型,也是目前应用较多的产品之一。

数据挖掘分类算法的研究与应用

首都师范大学 硕士学位论文 数据挖掘分类算法的研究与应用 姓名:刘振岩 申请学位级别:硕士 专业:计算机应用技术 指导教师:王万森 2003.4.1

首都师范入学硕.卜学位论Z数据挖掘分类算法的研究与应用 摘要 , f随着数据库技术的成熟应用和Internet的迅速发展,人类积累的数据量正在以指数速度增长。科于这些数据,人{}j已经不满足于传统的查询、统计分析手段,而需要发现更深层次的规律,对决策或科研工作提供更有效的决策支持。正是为了满足这种要求,从大量数据中提取出隐藏在其中的有用信息,将机器学习应用于大型数据库的数据挖掘(DataMining)技术得到了长足的发展。 所谓数据挖掘(DataMining,DM),也可以称为数据库中的知识发现(KnowledgeDiscoverDat曲鹅e,KDD),就是从大量的、不完全的、有噪声的、模糊的、随机的数据r},,提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。发现了的知识可以被用于信息管理、查询优化、决策支持、过程控制等,还可以用于数据自身的维护。因此,数据挖掘是数据库研究中的一个很有应用价值的新领域,它又是一门广义的交叉学科,融合了数据库、人工智能、机器学习、统计学等多个领域的理论和技术。 分类在数据挖掘中是一项非常重要的任务,目前在商业上应用最多。分类的目的是学会一个分类函数或分类模型,该模型能把数据库中的数据项映射到给定类别中的某一个。{乍多分类的方法已被机器学习、专家系统、统计学和神经生物学方面的研究者提}H。本论文主要侧重数据挖掘中分类算法的研究,并将分类算法划分为急切分类和懒散分类,全部研究内容基本围绕着这种划分方法展开。.1本文的主要研究内容:, l,讨论了数掂挖掘中分类的基本技术,包括数据分类的过程,分类数据所需的数据预处理技术,以及分类方法的比较和评估标准;比较了几种典 型的分类算法,包括决策树、k.最近邻分类、神经网络算法:接着,引 出本文的研究重点,即将分类算法划分为急切分类和懒散分类,并基于 这种划分展歼对数据挖掘分类算法的研究。 2.结合对决簸树方法的研究,重点研究并实现了一个“懒散的基于模型的分类”思想的“懒散的决策树算法”。在决策树方法的研究中,阐述了决 策树的基本概念以及决策树的优缺点,决策树方法的应用状况,分析了 决策树算法的迸一步的研究重点。伪了更好地满足网络环境下的应用需 求,结合传统的决策树方法,基于Ⅶ懒散的基于模型的分类”的思想, 实现了一个网络环境下基于B/S模式的“懒散的决策树算法”。实践表明: 在WEB应fH程序叶i采用此算法取得了很好的效果。、 ≯ 3.选取神经H络分类算法作为急切分类算法的代表进行深入的研究。在神经网络中,重点分析研究了感知器基本模型,包括感知器基本模型的构 造及其学习算法,模型的几何意义及其局限性。并针对该模型只有在线 性可分的情况一F彳‘能用感知器的学习算法进行分类的这一固有局限性, 研究并推广了感知器模型。

集合概念、表示方法、分类以及集合之间的关系

集合概念、表示方法、分类以及集合之间的关系 一般地,我们把研究对象统称为元素,一些元素组成的总体叫集 合,也简称集。 通常用大括号{ }或大写的拉丁字母A,B,C…表示,而元素用小写的拉丁字母a,b,c…表示。 元素与集合的关系有“属于∈”及“不属于?两种) ⑴若a是集合A中的元素,则称a属于集合A,记作a∈A; ⑵若a不是集合A的元素,则称a不属于集合A,记作a?A。 非负整数集(或自然数集),记作N; ;N内排除0的集. 正整数集,记作N*或N + 整数集,记作Z;有理数集,记作Q;实数集,记作R; ⑴确定性:⑵互异性:⑶无序性: 1:判断以下元素的全体是否组成集合,并说明理由: ⑴某班个子较高的同学⑵长寿的人 ⑷倒数等于它本身的数 ⑸某校2011级新生;⑹血压很高的人; ⑺著名的数学家;⑻平面直角坐标系内所有第三象限的点 7.元素与集合的关系:(元素与集合的关系有“属于∈”及“不属于?”) ⑴若a是集合A中的元素,则称a属于集合A,记作a∈A; ⑵若a不是集合A的元素,则称a不属于集合A,记作a?A。

例如,我们A 表示“1~20以内的所有质数”组成的集合,则有3∈A ,4 ?A ,等等。 练:A={2,4,8,16},则4A ,8 A ,32 A. 巩固练习分析: 练1.已知集合P 的元素为21,,3m m m --, 若2∈P 且-1?P ,求实 数m 的值。 练2下面有四个命题: ①若-a ?Ν,则a ∈Ν ②若a ∈Ν,b ∈Ν,则a +b 的最小值是2 ③集合N 中最小元素是1 ④ x 2+4=4x 的解集可表示为{2,2} 其中正确命题的个数是( ) 3求集合{2a ,a 2+a }中元素应满足的条件? 4若 t 1t 1+-∈{t},求t 的值. ⒈列举法:把集合中的元素一一列举出来, 并用花括号“{ }”括起来表 示 2.用列举法表示下列集合: (1) 小于5的正奇数组成的集合; (2) 能被3整除而且大于4小于15的自然数组成的集合; ⒉描述法:用集合所含元素的共同特征表示集合的方法,称为描述法。。 一般格式:{}()x A p x ∈

图论算法 最大流算法和最大匹配算法

最大流算法 clc,clear,M=1000; c(1,2)=3;c(1,4)=3; c(2,3)=1;c(2,4)=20; c(3,6)=3; c(4,5)=10; c(5,1)=4;c(5,3)=2;c(5,6)=13; n=length(u); list=[]; maxf=zeros(1:n);maxf(n)=1; while maxf(n)>0 maxf=zeros(1,n);pred=zeros(1,n); list=1;record=list;maxf(1)=M; while (~isempty(list))&(maxf(n)==0) flag=list(1);list(1)=[]; index1=(find(u(flag,:)~=0)); label1=index1(find(u(flag,index1)... -f(flag,index1)~=0)); label1=setdiff(label1,record); list=union(list,label1); pred(label1(find(pred(label1)==0)))=flag; maxf(label1)=min(maxf(flag),u(flag,label1)... -f(flag,label1)); record=union(record,label1); label2=find(f(:,flag)~=0); label2=label2'; label2=setdiff(label2,record); list=union(list,label2); pred(label2(find(pred(label2)==0)))=-flag; maxf(label2)=min(maxf(flag),f(label2,flag)); record=union(record,label2); end if maxf(n)>0 v2=n; v1=pred(v2); while v2~=1 if v1>0

分类算法综述

《数据挖掘》 数据挖掘分类算法综述 专业:计算机科学与技术专业学号:S2******* 姓名:张靖 指导教师:陈俊杰 时间:2011年08月21日

数据挖掘分类算法综述 数据挖掘出现于20世纪80年代后期,是数据库研究中最有应用价值的新领域之一。它最早是以从数据中发现知识(KDD,Knowledge Discovery in Database)研究起步,所谓的数据挖掘(Data Mining,简称为DM),就从大量的、不完全的、有噪声的、模糊的、随机的、实际应用的数据中提取隐含在其中的、人们不知道的但又有用的信息和知识的过程。 分类是一种重要的数据挖掘技术。分类的目的是根据数据集的特点构造一个分类函数或分类模型(也常常称作分类器)。该模型能把未知类别的样本映射到给定类别中的一种技术。 1. 分类的基本步骤 数据分类过程主要包含两个步骤: 第一步,建立一个描述已知数据集类别或概念的模型。如图1所示,该模型是通过对数据库中各数据行内容的分析而获得的。每一数据行都可认为是属于一个确定的数据类别,其类别值是由一个属性描述(被称为类别属性)。分类学习方法所使用的数据集称为训练样本集合,因此分类学习又可以称为有指导学习(learning by example)。它是在已知训练样本类别情况下,通过学习建立相应模型,而无指导学习则是在训练样本的类别与类别个数均未知的情况下进行的。 通常分类学习所获得的模型可以表示为分类规则形式、决策树形式或数学公式形式。例如,给定一个顾客信用信息数据库,通过学习所获得的分类规则可用于识别顾客是否是具有良好的信用等级或一般的信用等级。分类规则也可用于对今后未知所属类别的数据进行识别判断,同时也可以帮助用户更好的了解数据库中的内容。 图1 数据分类过程中的学习建模 第二步,利用所获得的模型进行分类操作。首先对模型分类准确率进行估计,例如使用保持(holdout)方法。如果一个学习所获模型的准确率经测试被认为是可以接受的,那么就可以使用这一模型对未来数据行或对象(其类别未知)进行分类。例如,在图2中利用学习获得的分类规则(模型)。对已知测试数据进行模型

两个集合合并算法

#include #include typedef struct { int n; }term,ElemType; typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList; typedef LinkList polymail; void create(LinkList &L); void add(polymail &pa,polymail &pb); void print(polymail &l); int comp(polymail &p,ElemType b); void main() { LinkList la,lb; printf("请输入集合A\n"); create(la); printf("请输入集合B\n"); create(lb); add(la,lb); print(la); free(lb); } void create(LinkList &L) { LinkList p,q; int n; n=0; L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; p=q=(LinkList)malloc(sizeof(LNode)); printf("输入以0结束\n"); scanf("%d",&p->data.n); while(p->data.n!=0) { n=n+1; if(n==1) L->next=p; else q->next=p;

q=p; p=(LinkList)malloc(sizeof(LNode)); scanf("%d",&p->data.n); } q->next=NULL; } void add(polymail &pa,polymail &pb) { polymail ha,hb,qa,qb; ElemType a; ha=pa; hb=pb; qa=ha->next; qb=hb->next; while(qb) { a=qb->data; switch(comp(pa,a)) { case 0:hb=qb->next;qb->next=ha->next;ha->next=qb;qb=hb;break; case 1:hb=qb->next;free(qb);qb=hb;break; } } free(hb); } int comp(polymail &p,ElemType b) { int n; n=0; polymail q; q=p->next; if(q!=NULL) do { if(b.n==q->data.n) { n=1; break; } q=q->next; }while(q!=NULL); return n; } void print(polymail &p)

相关文档
最新文档