logo资料库

程序员_软考专用复习资料.doc

第1页 / 共192页
第2页 / 共192页
第3页 / 共192页
第4页 / 共192页
第5页 / 共192页
第6页 / 共192页
第7页 / 共192页
第8页 / 共192页
资料共192页,剩余部分请下载后查看
常考基础必知必会 A. 排序: 排序有几种,各种排序的比较,哪些排序是稳定的,快排的算法; B. 查找:哈希查找、二叉树查找、折半查找的对比,哈希映射和哈希表的区别? C. 链表和数组的区别,在什么情况下用链表什么情况下用数组? D. 栈和队列的区别? E. 多态,举例说明;overload 和 override 的区别? F. 字符串有关的函数,比如让你写一个拷贝字符串的函数啊,或者字符串反转啊什么 的。strcpy 和 memcpy? G. 继承、多继承? H. 面向对象有什么好处? I. 说说 static 的与众不同之处,如果一个变量被声明为 static,它会被分配在哪里?在什 么时候分配空间等? J. 什么是虚函数、纯虚函数、虚的析构函数,用途? K. 内存泄漏及解决方法? 网络部分: OSI 模型 7 层结构,TCP/IP 模型结构? B. TCP/UDP 区别?
C. TCP 建立连接的步骤? D. 香农定理? 二叉树三种遍历的非递归算法(背诵版) 1.先序遍历非递归算法 #define maxsize 100 typedef struct { Bitree Elem[maxsize]; int top; }SqStack; void PreOrderUnrec(Bitree t) { SqStack s; StackInit(s); p=t; while (p!=null || !StackEmpty(s)) { while (p!=null) //遍历左子树 { visite(p->data); push(s,p); p=p->lchild;
}//endwhile if (!StackEmpty(s)) //通过下一次循环中的内嵌 while 实现右子树遍历 { p=pop(s); p=p->rchild; }//endif }//endwhile }//PreOrderUnrec 2.中序遍历非递归算法 #define maxsize 100 typedef struct { Bitree Elem[maxsize]; int top; }SqStack; void InOrderUnrec(Bitree t) { SqStack s; StackInit(s); p=t; while (p!=null || !StackEmpty(s)) {
while (p!=null) //遍历左子树 { push(s,p); p=p->lchild; }//endwhile if (!StackEmpty(s)) { p=pop(s); visite(p->data); //访问根结点 p=p->rchild; //通过下一次循环实现右子树遍历 }//endif }//endwhile }//InOrderUnrec 3.后序遍历非递归算法 #define maxsize 100 typedef enum{L,R} tagtype; typedef struct { Bitree ptr; tagtype tag; }stacknode;
typedef struct { stacknode Elem[maxsize]; int top; }SqStack; //后序遍历 void PostOrderUnrec(Bitree t) { SqStack s; stacknode x; StackInit(s); p=t; do { while (p!=null) //遍历左子树 { } x.ptr = p; x.tag = L; //标记为左子树 push(s,x); p=p->lchild;
while (!StackEmpty(s) &&s.Elem[s.top].tag==R) { } x = pop(s); p = x.ptr; visite(p->data); //tag 为 R,表示右子树访问完毕,故访问根结点 if (!StackEmpty(s)) { } s.Elem[s.top].tag =R; //遍历右子树 p=s.Elem[s.top].ptr->rchild; }while (!StackEmpty(s)); }//PostOrderUnrec 3.后序遍历非递归算法 #define maxsize 100 typedef enum{L,R} tagtype; typedef struct { Bitree ptr; tagtype tag; }stacknode;
typedef struct { stacknode Elem[maxsize]; int top; }SqStack; //后序遍历 void PostOrderUnrec(Bitree t) { SqStack s; stacknode x; StackInit(s); p=t; do { while (p!=null) //遍历左子树 { } x.ptr = p; x.tag = L; //标记为左子树 push(s,x); p=p->lchild;
while (!StackEmpty(s) &&s.Elem[s.top].tag==R) { } x = pop(s); p = x.ptr; visite(p->data); //tag 为 R,表示右子树访问完毕,故访问根结点 if (!StackEmpty(s)) { } s.Elem[s.top].tag =R; //遍历右子树 p=s.Elem[s.top].ptr->rchild; }while (!StackEmpty(s)); }//PostOrderUnrec 2、线性表 (1) 性表的链式存储方式及以下几种常用链表的特点和运算:单链表、循环链表,双向 链表,双向循环链表。 (2)单链表的归并算法、循环链表的归并算法、双向链表及双向循环链表的插入和删除 算法等都是较为常见的考查方式。 (3)单链表中设置头指针、循环链表中设置尾指针而不设置头指针以及索引存储结构的 各自好处。 3、栈与队列
分享到:
收藏