一、步骤
1、理解题意:
主要是根据问题的描述,确定问题的已知条件,并了解算法(程序)要达到的目的。通俗讲,就是要知道问题的输入和输出。
2、确定算法:
每个题目在前面都有描述,通过对描述的分析,要确定题目应该属于哪一类数据结构以及相应的算法。有些题目可能不属于任何数据结构,则它可能与某类算法(8类)有关;但也有一些算法纯粹是数学方法。
在描述中同时要理解算法过程。在分析算法时,可以以某个具体实例来试验。
3、理解程序:
分析程序结构,如果有很多子函数,首先弄清楚各函数之间的关系和各函数的作用;如果程序较长,则应该根据算法过程,把每个程序段与算法的每个过程对应起来,确定相应的程序段功能。
在程序中,已经定义了某些变量,则在理解程序时,首先必须理解这些变量的含义。
4、根据C语言的语法填空。
二、示例
【示例】2004年上半年程序员下午试题试题六
[函数说明]
函数DelAInsB(LinkedList La,LinkedList lb,int key1,int key2,int len)的功能是,将线性表A中关键码为keyl的结点开始的len个结点,按原顺序移至线性表B中关键码为key2的结点之前,若移动成功,则返回0;否则返回-1。线性表的存储结构为带头结点的单链表,La为表A的头指针,Lb为表B的头指针。单链表结点的类型定义为:
typedef struct node{
int key;
struct node*next;
}*Linkedhist;
[函数]
(1) int DelllnsB(LinkedLiSt La,LinkedList Lb,int keyl,int key2,int len)
(2) { LinkedList ?p,q,s,prep,pres;
(3) int k;
(4) if (!La->next || !Lb->next || len<=0) return-1;
(5) p = La->next; prep = La;
(6) while (p && p->key != keyl) { /* 查找表A中键值为key1的结点 */(7) prep = p;p = p->next;
(8) }
(9) if (!p) return -1; /* 表A中不存在键值为key1的结点 */
(10) q = p; k = 1;
(11) while (q && __(1)__) { /* 在表A中找出待删除的len个结点 */
(12) __(2)__; k++;
(13) }
(14) if (!q) return -1; /* 表A中不存在要被删除的len个结点 */
(15) s = Lb->next; __(3)__;
(16) while (s && s->key != key2) { /* 查找表B中键值为key2的结点 */(17) pres = s; s = s->next;
(18) }
(19) if (!s) return -1; /* 表B中不存在键值为key2的结点 */
(20) __(4)__ =q->next; /* 将表A中的len个结点删除 */
(21) q->next= ??(5) ;
(22) pres->next = p; /* 将len个结点移至表B */
(23) return 0;
(24) }
- 推荐给朋友
- 收藏此页
·网络工程师资料:网络体系结构-软考网络类题解 (2008-4-25 14:33:38)
·计算机网络基础网络拓扑结构及优缺点分析 (2008-2-22 14:04:32)
·网络工程师必知:静态路由协议配置方法 (2008-2-22 14:03:39)
·计算机网络尼奎斯特 香农公式例题解析 (2008-2-22 14:02:35)
·软考复习:因特网IP的分类、寻址规则及子网掩码 (2008-2-22 13:57:21)