熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> 數據結構 >> 正文

北京大學數據結構上機考題

2013-11-15 15:34:07  來源: 數據結構 

   編一C程序它能讀入集合A的一串整數(以為結束標記整數個數小於)和集合B 的一串整數(以為結束標記整數個數小於)計算並以從小到大的次序輸出AB 的所有元素(為A或B輸入時同一個數可能出現多次而A與B的差集中同一個數不能出現多次) (注程序的可執行文件名必須是 eexe)

  (注程序的可執行文件名必須是 eexe)

  */

  #include

  void BubbleSort(int r[]int n)

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

  int ijk;

  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 wxy;

  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 Countaaint 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(%dr[z]);

  }

  printf(\n);

  }

  */

  void main()

  {

  int a[] b[]c[];

  int exchange=;

  int ijkCountACountBCountC;

  printf(input a\n);

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

  {

  scanf(%d&a[i]);

  if(a[i]==)

  break;

  }

  CountA=i;

  BubbleSort(aCountA);

  CountA=DisaSameYs(aCountA);

  // testds(aCountA);

  printf(\ninput b\n);

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

  {

  scanf(%d&b[i]);

  if(b[i]==)

  break;

  }

  CountB=i;

  BubbleSort(bCountB);

  CountB=DisaSameYs(bCountB);

  //testds(bCountB);

  CountC=cha(abcCountACountB);

  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 TSeqString P)

  {

  int ijk;

  int m=Plength;

  int n=Tlength;

  for(i=;i<=nm;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&Rch[i]);

  // if(Rch[i]==)

  scanf(%s&Rch[i]);

  if(!(strcmp(&Rch[i])))

  break;

  }

  Rlength=i;

  return R;

  }

  void main()

  {

  int n;

  SeqString Str;

  Str=CreatStr(Str);

  SeqString Str;

  Str=CreatStr(Str);

  n=NaiveStrMatch(StrStr);

  printf(%d\nn);

  }

  /*

  編一C程序它能讀入集合A的一串整數(以為結束標記整數個數小於)

  和集合B的一串整數(以為結束標記整數個數小於)計算出A與B的交集

  並以由小到大的次序輸出A與B的交集中的所有整數(輸入整數時相鄰的兩個用空格隔開 為A或B輸入時同一個數可能出現多次而A與B的交集中同一個數不能出現多次) (注程序的可執行文件名必須是 eexe)

  */

  //注意調試程序時要多輸入重復數據調試;本程序是根據青龍提供的程序改編消除了重復數據的錯誤!;

  #include

  #include

  void BuCountbbleSort(int r[]int n)

  {//冒泡排序

  int ijk;

  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 Countaaint 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 Countaaint Countbb)

  {//求集合的交集

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

  //消除數組m[]中的重復元素

  int wxy;

  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(%dm[z]);

  }

  printf(\n);

  */

  //消除結束

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

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

  //求交集

  int i=j=k=;<
From:http://tw.wingwit.com/Article/program/sjjg/201311/23615.html

    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.