论坛登陆 用户名:  密 码:
设为首页  加入收藏
07年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> 复习资料 >> IT正文
程序员考试:数据结构笔记
 作者:佚名     2007-3-15 14:58:22        来源:不详  浏览次数:

知识:

  1.数据结构中对象的定义,存储的表示及操作的实现.
  2.线性:线性表、栈、队列、数组、字符串(广义表不考)
   树:二叉树
   集合:查找,排序
   图(不考)

能力

  分析,解决问题的能力

过程

  ● 确定问题的数据。
  ● 确定数据间的关系。
  ● 确定存储结构(顺序-数组、链表-指针)
  ● 确定算法
  ● 编程
  ● 算法评价(时间和空间复杂度,主要考时间复杂度)

一、数组

  1、存放于一个连续的空间
  2、一维~多维数组的地址计算方式
   已知data[0][0]的内存地址,且已知一个元素所占内存空间S求data[i][j]在内存中的地址。
   公式:(add+(i*12+j)*S)(假设此数组为data[10][12])

  注意:起始地址不是data[0][0]时候的情况。起始地址为data[-3][8]和情况;

  3、顺序表的定义
   存储表示及相关操作
  4、顺序表操作中时间复杂度估计
  5、字符串的定义(字符串就是线性表),存储表示
   模式匹配算法(简单和KMP(不考))
  6、特殊矩阵:存储方法(压缩存储(按行,按列))
   三对角:存储于一维数组
   三对角问题:已知Aij能求出在一维数组中的下标k;已知下标k求Aij
  7、稀疏矩阵:定义,存储方式:三元组表、十字链表(属于图部分,不考)

  算法

  ● 数组中元素的原地逆置; 对换
  ● 在顺序表中搜索值为X的元素;
  ● 在有序表中搜索值为X的元素;(折半查找)
  ● 在顺序表中的第i个位置插入元素X;
  ● 在顺序表中的第i个位置删除元素X;
  ● 两个有序表的合并;算法?


  线性表数据结构定义:
   Typedef struct {
    int data[max_size];
    int len;
   }linear_list;
  ● 模式匹配
  ● 字符串相加
  ● 求子串
  ● (i,j)<=>K 注意:不同矩阵所用的公式不同;
  ● 稀疏矩阵的转置(两种方式,后种为妙)
  ● 和数组有关的算法

  例程:求两个长整数之和。

  a=13056952168
  b=87081299
  数组:
  a[]:1 3 0 5 6 9 5 2 1 6 8
  b[]:8 7 0 8 1 2 9 9 
  由于以上的结构不够直观(一般越是直观越容易解决) 将其改为:
  a[]:11 8 6 1 2 5 9 6 5 0 3 1 a[0]=11(位数)
  b[]: 8 9 9 2 1 8 0 7 8 0 0 0 b[0]=8
  c进位 0 1 1 0 0 1 1 1 1 0 0 
  c[]:11 7 6 4 3 3 0 4 4 2 3 1 c[0]的值(C位数)由c[max_s+1]决定!
  注意:在求C前应该将C(max_s+1)位赋0.否则为随机数; 较小的整数高位赋0.
  算法:已知a,b两个长整数,结果:c=a+b;
  总共相加次数: max_s=max(a[],b[])
  程序:
  for(i=1;i<=max_s;i++) {
   k=a[i]+b[i]+c[i];
   c[i]=k%10;
   c[i+1]=k/10;
  }
  求c位数:
  if(c[max_s+1]==0)
   c[0]=max_s;
  else
   c[0]=max_s+1;
  以下代码是我编的(毕竟是初学者.不太简洁大家不要见怪!):
  /*两长整数相加*/
   #include<stdio.h>
   #include<string.h>
  #define PRIN printf("\n");

  int flag=0; /*a[0]>b[0]?1:0*/

  /* max(a[],b[]) {}*/

  change(char da[],char db[],int a[],int b[],int c[]) {
   int i;
   if(a[0]>b[0]) {
    for(i=1;i<=a[0];a[i]=da[a[0]-i]-'0',i++); /*a[0]-'0' so good!*/
    for(i=1;i<=b[0];b[i]=db[b[0]-i]-'0',i++);
    for(i=b[0]+1;i<=a[0];b[i]=0,i++);
    for(i=1;i<=a[0]+1;c[i]=0,i++);
    flag=1;
   }
   else {
    for(i=1;i<=b[0];b[i]=db[b[0]-i]-'0',i++);
    for(i=1;i<=a[0];a[i]=da[a[0]-i]-'0',i++);
    for(i=a[0]+1;i<=b[0];a[i]=0,i++);
    for(i=1;i<=b[0]+1;c[i]=0,i++);
   }
  }

  add(int a[],int b[],int c[]) {
   int i,sum;
   if(flag==1) {
    for(i=1;i<=a[0];i++) {
     sum=a[i]+b[i]+c[i];
     c[i+1]=sum/10;
     c[i]=sum%10;
    }
    if(c[a[0]+1]==0)
     c[0]=a[0];
    else
     c[0]=a[0]+1;
   }
   else {
    for(i=1;i<=b[0];i++) {
     sum=a[i]+b[i]+c[i];
     c[i+1]=sum/10;
     c[i]=sum%10;
    }
    if(c[b[0]+1]==0)
     c[0]=b[0];
    else
     c[0]=b[0]+1;
   }
  }

  void print(int m[]) {
   int i;
   for(i=m[0];i>=1;i--)
    printf("%d,",m[i]); PRIN
  }

  main(){
   int s;
   int a[20],b[20],c[20];
   char da[]={"123456789"};
   char db[]={"12344443"};
   a[0]=strlen(da);
   b[0]=strlen(db);
   printf("a[0]=%d\t",a[0]);
   printf("b[0]=%d",b[0]); PRIN
   change(da,db,a,b,c);
   printf("flag=%d\n",flag); PRIN
   printf("-----------------\n");
   if(flag==1) {
    print(a); PRIN
    s=abs(a[0]-b[0]);
    printf("+");
     for(s=s*2-1;s>0;s--)
      printf(" ");
      print(b); PRIN
   }
   else {
    s=abs(a[0]-b[0]);
    printf("+");
    for(s=s*2-1;s>0;s--)
     printf(" ");
     print(a); PRIN
     print(b); PRIN
   }
   add(a,b,c);
   printf("-----------------\n");
   print(c);
  }

时间复杂度计算:

  ● 确定基本操作
  ● 计算基本操作次数
  ● 选择T(n)
  ● lim(F(n)/T(n))=c
  ● 0(T(n))为时间复杂度
  上例子的时间复杂度为O(max_s);

[1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页

责任编辑:lss
  相关新闻
2006年上半年《程序员》试题分析
2005年下半年程序员考试试题结构分析
为什么要学习Java,成为Java程序员
思科证书到期了怎么办—再认证程序介绍
经典的C程序案例
程序员考试补课笔记-第九天
2006程序员第一章系统基础知识[讲义]
2006年软考程序员数据结构复习笔记
程序员考试补课笔记-第六天
程序员考试下午试题程序填空解题方法
为什么要学习Java,成为Java程序员
C++程序设计从零开始之何谓
信息系统管理工程师、信息系统运行管理员考试说明
由“电脑盲”成为高级程序员的语文教师
程序员考试补课笔记-第一天
程序员考试补课笔记-第三天
程序员考试补课笔记-第二天
程序员考试补课笔记-第四天
程序员考试补课笔记-第七天
程序员考试补课笔记-第六天
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号