知识大全 北京大学数据结构上机考题

Posted 整数

篇首语:所谓一见钟情不过见色起意,所谓日久生情不过权衡利弊。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 北京大学数据结构上机考题相关的知识,希望对你有一定的参考价值。

   编一C程序 它能读入集合A的一串整数(以 为结束标记 整数个数小于 )和集合B 的一串整数(以 为结束标记 整数个数小于 ) 计算并以从小到大的次序输出A B 的所有元素(为A或B输入时 同一个数可能出现多次 而A与B的差集中同一个数不能出现多次) (注 程序的可执行文件名必须是 e exe)

  (注 程序的可执行文件名必须是 e exe)

  */

  #include

  void BubbleSort(int r[] int n)

  //冒泡排序(有小到大)

  int i j k;

  int exchange;

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

  

  exchange= ;

  for(j=n ;j>=i;j )

  if(r[j+ ]

  

  k=r[j+ ];

  r[j+ ]=r[j];

  r[j]=k;

  exchange= ;

  

  if(!exchange)

  break;

  

  

  int DisaSameYs(int r[] int n)

  //消除数组r[]中的重复元素 并返回消除后数组剩余的元素个数

  int w x y;

  for(w= ;w<=n;w++)

  

  for(x=w+ ;x<=n;x++)

  

  if(r[w]==r[x])

  

  n ;

  for(y=x;y<=n;y++)

  

  r[y]=r[y+ ];

  //endfor

  x ;

  //endif

  //endfor

  //endfor

  return n;

  

  int cha(int m[] int n[] int l[] int Countaa int Countbb)

  //求差集

  int i= j= k= ;

  int exch;

  while(i<=Countaa)

  

  exch= ;//交换变量为

  for(j= ;j<=Countbb;j++)

  //用集合的第一个元素分别和另一个集合的各元素相比较

  //然后再用第二个元素(直到最后一个元素)和另一个集合的各元素相比较

  if(m[i]==n[j])

  //如果相同 交换变量变为

  exch= ;

  break;

  //endif

  //endfor

  if(!exch)

  //如果没有相同的就保存m[i]到l[]中

  l[k]=m[i];

  k++;

  

  i++;

  //endwhile

  return k;

  

  /*

  void testds(int r[] int n)

  //测试消除数组中的重复元素的效果用下列循环输出

  int z;

  for(z= ;z<=n;z++)

  

  printf( %d r[z]);

  

  printf( \\n );

  

  */

  void main()

  

  int a[ ] b[ ] c[ ];

  int exchange= ;

  int i j k CountA CountB CountC;

  printf( input a\\n );

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

  

  scanf( %d &a[i]);

  if(a[i]== )

  break;

  

  CountA=i ;

  BubbleSort(a CountA);

  CountA=DisaSameYs(a CountA);

  // testds(a CountA);

  printf( \\ninput b\\n );

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

  

  scanf( %d &b[i]);

  if(b[i]== )

  break;

  

  CountB=i ;

  BubbleSort(b CountB);

  CountB=DisaSameYs(b CountB);

  //testds(b CountB);

  CountC=cha(a b c CountA CountB);

  printf( \\n\\n );

  for(i= ;i<=CountC ;i++)

  

  printf( %d c[i]);

  

  printf( \\n );

  

  //////////////////////////////////////////////////////

  //模式匹配

  #include

  #include

  typedef struct

  // int ch[ ];

  char ch[ ];

  int length;

  SeqString;

  int NaiveStrMatch(SeqString T SeqString P)

  

  int i j k;

  int m=P length;

  int n=T length;

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

  

  j= ;k=i;

  while(j

  

  k++;j++;

  

  if(j==m)

  return i;

  //endfor

  return ;

  //NaiveStrMatch

  SeqString CreatStr(SeqString R)

  

  int i;

  printf( input data\\n );

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

  

  // scanf( %d &R ch[i]);

  // if(R ch[i]== )

  scanf( %s &R ch[i]);

  if(!(strcmp(&R ch[i] )))

  break;

  

  R length=i ;

  return R;

  

  void main()

  

  int n;

  SeqString Str ;

  Str =CreatStr(Str );

  SeqString Str ;

  Str =CreatStr(Str );

  n=NaiveStrMatch(Str Str );

  printf( %d\\n n);

  

  /*

   编一C程序 它能读入集合A的一串整数(以 为结束标记 整数个数小于 )

  和集合B的一串整数(以 为结束标记 整数个数小于 ) 计算出A与B的交集

  并以由小到大的次序输出A与B的交集中的所有整数(输入整数时 相邻的两个用空格隔开 为A或B输入时 同一个数可能出现多次 而A与B的交集中同一个数不能出现多次) (注 程序的可执行文件名必须是 e exe)

  */

  //注意调试程序时要多输入重复数据调试;本程序是根据青龙提供的程序改编 消除了重复数据的错误!;

  #include

  #include

  void BuCountbbleSort(int r[] int n)

  //冒泡排序

  int i j k;

  int exchange;

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

  

  exchange= ;

  for(j=n ;j>=i;j )

  if(r[j+ ]

  

  k=r[j+ ];

  r[j+ ]=r[j];

  r[j]=k;

  exchange= ;

  

  if(!exchange)

  break;

  

  

  int BingJi(int m[] int n[] int l[] int Countaa int Countbb)

  //求集合的并集

  int i= j= k= ;

  while(i<=Countaa&&j<=Countbb)

  

  if(m[i]

  //如果 m[i]

  l[k]=m[i];

  k++;

  i++;

  //endif

  else if(m[i]>n[j])

  //如果 m[i]>n[j]则取小的值n[j] 然后j++;

  l[k]=n[j];

  k++;

  j++;

  //end elseif

  else

  //如果 m[i]==n[j] 可以任取一个值 然后i++;j++;

  l[k]=m[i];

  k++;

  i++;

  j++;

  //endelse

  //endwhile

  if(i>Countaa)

  //如果i>Countaa 即数组m[i]中的元数个数较少

  //则把n[j]中的剩余元素 都付给l[]

  while(j<=Countbb)

  

  l[k]=n[j];

  j++;

  k++;

  //endwhile

  //endif

  if(j>Countbb)

  //如果j>Countbb 即数组n[i]中的元数个数较少

  //则把m[j]中的剩余元素 都付给l[]

  while(i<=Countaa)

  

  l[k]=m[i];

  i++;

  k++;

  //endwhile

  //endif

  return k;//返回生成的数组的元数个数

  //end BuCountbbleSort

  int JiaoJi(int m[] int n[] int l[] int Countaa int Countbb)

  //求集合的交集

  ///////////////////////////////////

  //消除数组m[]中的重复元素

  int w x y;

  for(w= ;w<=Countaa;w++)

  

  for(x=w+ ;x<=Countaa;x++)

  

  if(m[w]==m[x])

  

  Countaa ;

  for(y=x;y<=Countaa;y++)

  

  m[y]=m[y+ ];

  //endfor

  x ;

  //endif

  //endfor

  //endfor

  /*

  //测试消除数组中的重复元素的效果用下列循环输出

  int z;

  for(z= ;z<=Countaa;z++)

  

  printf( %d m[z]);

  

  printf( \\n );

  */

  //消除结束

  ///////////////////////////////////

  ///////////////////////////////////

  //求交集

相关参考