a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 89|回复: 1

[程序员] 2012年软件水平程序员考试复习笔试知识辅导(三)

[复制链接]
发表于 2012-8-2 08:51:15 | 显示全部楼层 |阅读模式
2、线性表   (1) 性表的链式存储方式及以下几种常用链表的特点和运算:单链表、循环链表,双向链表,双向循环链表。
; a; m8 G# w5 |* w2 T  (2)单链表的归并算法、循环链表的归并算法、双向链表及双向循环链表的插入和删除算法等都是较为常见的考查方式。( H, {- z$ I8 [( c, L2 r  h3 ?$ R
  (3)单链表中设置头指针、循环链表中设置尾指针而不设置头指针以及索引存储结构的各自好处。0 M" Y) H) s5 {" v; d
  3、栈与队列& s8 U) B( Y5 d* F/ V
  你可以问一下自己是不是已经知道了以下几点:( d$ J2 B* o( A% V  n
  (1)栈、队列的定义及其相关数据结构的概念,包括:顺序栈,链栈,共享栈,循环队列,链队等。栈与队列存取数据(请注意包括:存和取两部分)的特点。
$ R- C6 `$ L! Q& F  (2)递归算法。栈与递归的关系,以及借助栈将递归转向于非递归的经典算法:n!阶乘问题,fib数列问题,hanoi问题,背包问题,二叉树的递归和非递归遍历问题,图的深度遍历与栈的关系等。其中,涉及到树与图的问题,多半会在树与图的相关章节中进行考查。, \; N4 l9 n. \5 n) M2 B0 N
  (3)栈的应用:数值表达式的求解,括号的配对等的原理,只作原理性了解,具体要求考查此为题目的算法设计题不多。4 K+ [( g9 j/ m8 v
  (4)循环队列中判队空、队满条件,循环队列中入队与出队(循环队列在插入时也要判断其是否已满,删除时要判断其是否已空)算法。
3 \! L4 j- v, B3 C9 M' i* j- t1 X  【循环队列的队空队满条件
- V# v  \& [( I: S* p+ Q  为了方便起见,约定:初始化建空队时,令
7 Z6 ~- k( O) B  front=rear=0,2 G& i' X! I# F1 Y1 e! V
  当队空时:front=rear,
4 \, ~# ^8 Q7 y8 d9 J7 M, P  当队满时:front=rear 亦成立,
: [4 I  S) o2 u) m( E  因此只凭等式front=rear无法判断队空还是队满。
& @& H0 `! W! l( K0 ?' Z; U& L, B  有两种方法处理上述问题:! V2 a3 V0 @, S4 y, q1 y( x) r% f
  (1)另设一个标志位以区别队列是空还是满。
* i1 t0 b; q2 ]# o! x: W3 z  (2)少用一个元素空间,约定以“队列头指针front在队尾指针rear的下一个位置上”作为队列“满”状态的标志。
! I  K6 ^$ o9 y+ e- L  队空时: front=rear,0 L# [7 I; `* [& p
  队满时: (rear+1)%maxsize=front】
5 F4 L- Y$ f2 }0 {  如果你已经对上面的几点了如指掌,栈与队列一章可以不看书了。注意,我说的是可以不看书,并不是可以不作题哦。( i6 m. N2 p" \4 K8 h
  循环队列的主要操作:$ P( L4 k2 d" W1 r$ S: x5 }
  (1)创建循环队列
' p, l! u' _7 }$ V  (2)初始化循环队列6 v1 |' x2 Y7 e! A: d) j
  (3)判断循环队列是否为空
2 x% i% M9 ?! u* {+ @$ ?% J4 |4 g  (4)判断循环队列是否为满  h7 Q) r% I" `7 ?6 D7 Y
  (5)入队、出队
* d. ]& f! k3 V1 A" E  //空出头尾之间的一个元素不用
! w' d& |1 K* w0 G7 X  #include
( l4 v8 b5 H8 @, i  #include
! C+ y4 B6 e- i) S: V. u  #define MAXSIZE 1008 R' [9 b2 ?5 `! V
  typedef struct
3 U3 y$ r2 `: a5 }, i% o6 L' X  {7 i. S) ?/ W8 _
  intelem[MAXSIZE];
) [. k7 S. b* V0 m  intfront, rear;. b5 V/ v8 ^; L7 o2 X4 m
  }Quque; //定义队头
5 b6 C: C. c  b' w. L  int initQue(Quque **q) //初始化/ b( G  I# z# {% H$ f" p
  {
3 @# H: [6 Q6 ^  (*q)->front=0;( L6 m2 ^7 m3 y/ t$ Y
  (*q)->rear=0;
7 x$ f$ [8 X. r: w. j) o
: m/ d7 ~$ F& J' A  t$ S  }
回复

使用道具 举报

 楼主| 发表于 2012-8-2 08:51:16 | 显示全部楼层

2012年软件水平程序员考试复习笔试知识辅导(三)

</p>  int isFull(Quque *q)# c7 F  C. E& B8 H% L6 _/ O+ }
  {! y# \; h% Y2 l: ?0 p* F
  if(q->front==(q->rear+1)%MAXSIZE)//判满(空出一个元素不用) 刘勉刚+ U) {$ X+ [1 c
  return 1;
- I& d7 |" w' s8 T' i+ N4 f3 i# O  else' N! K/ D# O. C
  return 0;
7 S( L, N# C( L% M/ M/ A  }( `! K2 P( l$ p3 ?( w0 S( u0 K
  int insertQue(Quque **q,int elem)% X( T( k* N* g3 k
  {$ f+ k7 G6 D. S( V3 r4 }
  if(isFull(*q))return -1;2 a* s% o8 A; J+ S* l" X
  (*q)->elem[(*q)->rear]=elem;
& A5 U, U8 s: R# V& B  (*q)->rear=((*q)->rear+1)%MAXSIZE;//插入
% r. e7 q/ t% o# }( N  return0;
) y4 k! U  O4 P( P# F) ]  }% v6 ]# C* N6 E( D; `
  int isEmpty(Quque *q)
  V8 {  }' ]# O& P1 D  {1 q* D; D$ c: V* I9 H3 _
  if(q->front==q->rear)//判空! m& ]+ ^  K1 K2 P& }) V' {+ U
  return 1;- }2 H& e( E0 C- g3 Y( P7 Z& J7 t% S
  else' G" D, l+ o& t) C5 c7 _
  return 0;
# r1 w* q, k3 I" q# t3 ?  }* p2 o7 |/ q/ D
  int deleteQue(Quque ** q,int *pelem)( ~! |9 |7 A# ~  }$ c
  {
% d9 Z8 O( }: G5 y* L  if(isEmpty(*q))
5 `, y5 h- s! M! a- s8 x7 {$ h8 E  return 0;
8 O6 {- V& T; Z, ?# T  *pelem=(*q)->elem[(*q)->front];
- Z9 \  N2 X( Z1 ]1 S  (*q)->front=((*q)->front +1)%MAXSIZE;% F) n( G. c/ h, a, v% B
  return0;
$ z1 b2 i0 Q1 `  }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-18 10:58 , Processed in 0.144679 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表