资料中心

北大自考数据结构上机考试复习总结

来源:  点击数:  录入时间:07-04-09 10:31:38
  数据结构练习题1

  1.编一C程序,它能根据读入的数据构造有向图G,并输出G的邻接矩阵和DFS遍历序列(从V0开始),图的输入形式为n Vi0 Vj0 Vi1 Vj1 Vi2 Vj2……Vim Vjm -1 -1(-1,-1为输入结束标记),它们都是整数,且100>n>0,其余的值都>=0且

  (注:程序的可执行文件名必须是 e1.exe,存于你的账号或其debug目录下。)

  2. 编一C程序,它能读入两组整数(每组整数都以-9999为结束标记,个数都不大于1000),并以从小到大的次序输出既在第一组整数中而且不在第二组整数中的所有整数(同一个整数不能输出两次)。(输入时,两个相邻的整数用空格隔开)。

  (注:程序的可执行文件名必须是 e2.exe,存于你的账号或其debug目录下。)

  数据结构练习题2

  1.编一C程序,它能读入两组整数(每组整数都是66个整数),它们分别是下三角矩阵A和下三角矩阵B的按行优先排列的元素(A和B的其它元素均为零)。计算并输出矩阵A与B的乘积。

  (注:程序的可执行文件名必须是 e1.exe,存于你的账号或其debug目录下。)

  #include

  #include

  void main()

  {

  int i,j, k1,k2,c[66],s,k,count=0,flag=0;

  int a[66];

  int b[66];

  printf(“请输入66个数到a中:\n”);

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

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

  printf(“请输入66个数到b中:\n”);

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

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

  for(i=0;i<11;i++){

  for(k=0;k<11;k++)

  {s=0;

  for(j=0;j<11&&i>=j;j++)

  k1=i*(i+1)/2+j;

  if(j>=k)

  k2=j*(j+1)/2+i;

  else

  continue;

  s+=a[k1]*b[k2];

  flag=1;

  }

  if(flag)

  {

  c[count++]=s;

  flag=0;

  }

  }

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

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

  }

  2.编一C程序,它能对输入的一串整数(不多于1000个,以-9999为结束标记)到数组a中,再对a的元素进行直接插入排序(从小到大排序),输出排序结果和所用关键字比较次数。(输入时,两个相邻的整数用空格隔开)。

  (注:程序的可执行文件名必须是 e2.exe,存于你的账号或其debug目录下。)

  #include

  #include

  void main()

  {

  int i,j, k1,k2,c[66],s,k,count=0,flag=0;

  int a[66];

  int b[66];

  printf(“请输入66个数到a中:\n”);

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

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

  printf(“请输入66个数到b中:\n”);

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

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

  for(i=0;i<11;i++){

  for(k=0;k<11;k++)

  {s=0;

  for(j=0;j<11&&i>=j;j++)

  k1=i*(i+1)/2+j;

  if(j>=k)

  k2=j*(j+1)/2+i;

  else

  continue;

  s+=a[k1]*b[k2];

  flag=1;

  }

  if(flag)

  {

  c[count++]=s;

  flag=0;

  }

  }

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

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

  }

  数据结构练习题3

  1. 编一C程序,它能根据输入的二叉树前序和中序序列来构造该二叉树,并能输出该二叉树的后序序列和该二叉树叶的结点的个数以及该二叉树高度。(输入次序是:表示前序序列的字符串、表示中序序列的字符串)。

  (注:程序的可执行文件名必须是 e1.exe,存于你的账号或其debug目录下。)

  #include

  #include

  #include

  void exit(int);

  #define MAX 100

  typedef struct node{

  char d;

  struct node *lchild,*rchild;

  }Tnode;

  void MKTree(char pre[],int pres,int pree,char in[],int is,int ie,Tnode **r)

  {

  int i;

  if(pres>pree||is>ie)

  *r=NULL;

  else{

  *r=malloc(sizeof(Tnode));

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

  if(pre[pres]==in[i])

  {

  MKTree(pre,pres+1,pres+i-is,in,is,is+i-1,&(*r)->lchild);

  MKTree(pre,pres+i+is+1,pree,in,is+i+1,ie,&(*r)->rchild);

  break;

  }

  }

  }

  void postorder(Tnode *r)

  {

  if(r)

  {

  postorder(r->lchild);

  postorder(r->rchild);

  printf(“%c”,r->d);

  }

  }

  int num(Tnode *r)

  {

  if(r==NULL)

  return 0;

  else

  if(r->lchild==NULL&&r->rchild==NULL)

  return 1;

  else

  return num(r->lchild)+num(r->rchild);

  }

  int height(Tnode *r)

  {

  int h1,h2;

  if(r==NULL)

  return 0;

  else

  {

  h1=height(r->lchild);

  h2=height(r->rchild);

  return 1+(h1>h2)?h1:h2;

  }

  }

  void main()

  {

  Tnode *r;

  char pre[MAX],in[MAX];

  printf(“input preorder and inorder \n”);

  gets(pre);

  gets(in);

  MKTree(pre,0,strlen(pre)-1,in,0,strlen(in)-1,&r);

  printf(“The postorder is as follow:\n”);

  postorder(r);

  printf(“\n there are %d leaves in the tree\n”,num(r));

  printf(“h=%d\n”,height(r));

  }

  2.编一C程序,它能读入一串(n个)整数(以-9999为结束标记),并判断第1个整数在后(n-1)个整数中出现的次数,再输出该次数。(输入时,两个相邻的整数用空格隔开)。

  (注:程序的可执行文件名必须是 e2.exe,存于你的账号或其debug目录下。)数据结构练习题4

  1. 编一C程序,它能根据输入的二叉树中序和后序序列来构造该二叉树,并能输出该二叉树的前序序列和该二叉树的度为2的结点的个数并能判断该二叉树是否为二叉排序树(若是输出Yes;否则输出No)。(输入次序是:表示中序序列的字母串、表示后序序列的字母串)。

  (注:程序的可执行文件名必须是 e1.exe,存于你的账号或其debug目录下。)

  #include

  #include

  #include

  void exit(int);

  #define MAX 100

  typedef struct node{

  char d;

  struct node *lchild,*rchild;

  }Tnode;

  void MKTree(char in[],int is,int ie,char post[],int posts,int poste,Tnode **r)

  {

  int i;

  if(is

  *r=NULL;

  else{

  *r=malloc(sizeof(Tnode));

  (*r)->d=post[poste];

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

  if(post[poste]==in[i])

  {

  MKTree(in,is,i-1,post,posts,posts+i-is-1,&(*r)->lchild);

  MKTree(in,i+1,ie,post,posts+i-is,poste-1,&(*r)->rchild);

  break;

  }

  if(i>ie){

  printf(“Error:input contain an error !\n”);

  exit(9);

  }

  }

  }

  void BST(char in[],int is,int ie)

  {

  int i;

  if(is==ie)

  printf(“yes\n”);

  else

  {

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

  {

  if(in[i]

  continue;

  else

  break;

  }

  if(i==ie)

  printf(“YES\n”);

  else

  printf(“NO\n”);

  }

  }

  void preorder(Tnode *r)

  {

  if(r)

  {

  printf(“%c”,r->d);

  preorder(r->lchild);

  preorder(r->rchild);

  }

  }

  int seconde(Tnode *r)

  {

  if(r==NULL)

  return 0;

  else

  if((r->lchild)!=NULL&&(r->rchild)!=NULL)

  return 1;

  else

  return seconde(r->lchild)+seconde(r->rchild);

  }

  void main()

  {

  Tnode *r;

  char post[MAX],in[MAX];

  printf(“input inorder and postorder !\n”);

  gets(in);

  gets(post);

  MKTree(in,0,strlen(in)-1,post,0,strlen(post)-1,&r);

  printf(“the preorder is as follows:\n”);

  preorder(r);

  printf(“\n there are %d seconde in the tree \n”,seconde(r));

  printf(“if the tree is BST:\n”);

  BST(in,0,strlen(in)-1);

  }

  2.编一C程序,它能读入一串整数(以-9999为结束标记),再以与输入次序相反的次序输出这串整数(输入、出时,两个相邻的整数用空格隔开)。

  (注:程序的可执行文件名必须是 e2.exe,存于你的账号或其debug目录下。)

  #include

  #define max 10000

  main()

  {

  int a[max];

  int n=0,i,d;

  printf(“please enten tne number:\n”);

  do{

  scanf(“%d”,&d);

  if(d==-9999)

  break;

  n++;

  a[n]=d;

  }while(9);

  for(i=n;i>0;i——)

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

  printf(“\n”);

  }

  数据结构练习题5

  1. 编一C程序,它能读入一个大写英文字母串(字母个数不多于100,字母两两不同),并构造以这些字母为关键字的二叉排序树,再输出该二叉排序树的后序序列和页结点个数。

  (注:程序的可执行文件名必须是 e1.exe,存于你的账号或其debug目录下,否则无成绩)

  2. 编一C程序,它能读入两组整数(每组整数都以-9999为结束标记,-9999不算在内。个数都不大于1000),并以从小到大的次序输出既在第一组整数中也在第二组整数中的所有整数(同一个整数不能输出两次)。(输入时,两个相邻的整数用空格隔开)。

  (注:程序的可执行文件名必须是 e2.exe,存于你的账号或其debug目录下,否则无成绩)

  #include

  void paixu(int r[],int n)

  {

  int i,j,k;

  int exchange;

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

  {

  exchange=0;

  for(j=n-1;j>=i;j——)

  if(r[j+1]

  {

  k=r[j+1];

  r[j+1]=r[j];

  r[j]=k;

  exchange=1;

  }

  if(!exchange)

  break;

  }

  }

  int jiaoji(int m[],int n[],int l[],int countaa,int countbb)

  {

  int w,x,y;

  int i=0,j=0,k=0;

  for(w=0;w<=countaa;w++)

  {

  for(x=w+1;x<=countaa;x++)

  {

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

  {

  countaa——;

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

  {

  m[y]=m[y+1];

  }

  x——;

  }

  }

  }

  while(i<=countaa)

  {

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

  {

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

  {

  l[k]=m[i];

  k++;

  break;

  }

  }

  i++;

  }

  return k;

  }

  void main()

  {

  int a[1000],b[1000],c[2000];

  int excange=0,i,countA,countB,countC;

  printf(“请输入数组a: \n”);

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

  {

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

  if(a[i]==-9999)

  break;

  }

  countA=i-1;

  paixu(a,countA);

  printf(“请输入数组b: \n”);

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

  {

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

  if(b[i]==-9999)

  break;

  }

  countB=i-1;

  paixu(b,countB);

  countC=jiaoji(a,b,c,countA,countB);

  printf(“\n\n”);

  for(i=0;i<=countC-1;i++)

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

  printf(“\n”);

 上一篇文章: 湖北自考城乡社区建设与管理(专科)专业计划
 下一篇文章: 2007年4月自考时事政治复习参考资料(完整)
自考在线课堂
【 北京联合大学广告学院高教自考招 】
【 新加坡华夏管理学院2008年自主招 】
【 北大英语自考部招生日语英语专业 】
【 一年半获取国家承认自学考试证书 】
【 北京联合大学广告学院2008年自考 】
【 2008年首都联合职工大学招生简介 】
自考必读 新手入门 | 报考指南 | 免考加考 | 毕业申请 | 自考常识
自考BLOG
【 陈瑞华再次将自考生推向悬崖愤怒 】
【 让你电脑右下角显示你(爱人)名字 】
【 分享一下 一个自考生的成功经验 】
【 自考这两年半经验之谈,新手必读 】
自考专题
【 自考专题第三期:就业,我们也行 】
【 自考专题二期:晒晒我们的自考情 】
【 自考专题一期:呐喊,我们也考研 】
自考推荐
自考招生
自考知道:有问必答!
全国各省市自考办电话
各地区官方网地址大全
寻找同城异性自考朋友
欢迎您订阅北京考试报
各地10月自考报名时间
中国自考网俱乐部成立
08年10月自考成绩查询
2009年自考时间及课程
09上半年自考报名时间
08年7月自考成绩查询
新手入门

法律本科公司法还是考04版的教材吗
我错过的自学考试的报考时间怎么办
法律事务与律师自考有什么不一样?
问谁知道高教自考非教育类的专科生
我想参加自考 请问需要什么条件吗
请教关于自考新旧计划课程顶替问题
自己所在的省没有想学的专业怎么办
高等数学(一)免考 问题急盼回复

自考时间
专业课程
转考免考
学位实践
学科系别
违纪处罚
疑难杂症
自考推荐
自考论坛
资格考试·串讲资料
今日推荐
[四川] 武侯区08年下半年高教自考毕业证办理须知
[福建] 09自考轮机工程技术专业(专科)考试计划
[重庆] 2008年10月有6万余人参加高等教育自学考试
[福建] 2009年高教自学考试4门统考课考试安排确定
[安徽] 09年4月高等教育自学考试考生报名时间公布
[江西] 08年高教自考体育教育(本科)课程的设置
[广东] 08广州某防空旅高教自学考试开设野外考场
[内蒙古] 08年高等教育自学考试课程免考相关规定
[广东] 有关汕头09年1月高等教育自学考试报考通知
[贵州] 09年高等教育自学考试课程安排有关的通知