程序员考试笔记
来源:互联网 发布:vwap算法 编辑:程序博客网 时间:2024/05/01 07:04
我的程序员考试笔记--第二天 发表于www.oldchild.net(老顽童站)
第二天 时间:9/18/2003
转眼又过了一周了,前面一周里面我编了一些程序:链表,长整型数相加,三元组表转置以及一些简单的函数.其实有些算法想想是很简单,不过写起来还是需要一定耐心和C基础的,如果你自己觉得各算法都很懂了,不妨开机编编试试.或许会有一些新的发现与体会.
栈和队列
知识点:
l 栈的定义:操作受限的线性表
l 特点:后进先出
l 栈的存储结构:顺序,链接
/ push(s,d)
l 栈的基本操作:
/ pop(s)
栈定义:
struct {
datatype data[max_num];
int top;
};
l 队列定义
特点:先进先出
/入队列 in_queue(Q,x)
l 队列的操作:
/出队列 del_queue(Q)
l 队列存储结构:
链队列:
Typedef struct node{
Datatype data;
Struct node *next;
}NODE;
Typedef struct {
NODE *front;
NODE *rear;
}Queue;
顺序队列:
struct {
datatype data[max_num];
int front,rear;
};
问题:
队列ó线性表
假溢出<=循環队列
队列满,队列空条件一样<=浪费一个存储空间
递归
定义:问题规模为N的解依赖于小规模问题的解。问题的求解通过小规模问题的解得到。
包括二个步骤:
1)递推 6!=>5!=>4!=>3!=>2!=>1!=>0!
2)回归 720<=120<=24<=6 <=2 <=1 <=0
递归工作栈实现递归的机制。
二.有关算法:
1)顺序,链表结构下的出栈,入栈
2)循環,队列的入队列,出队列。
3)链队列的入队列,出队列。
4)表达式计算: 后缀表达式 35+6/4368/+*-
中缀表达式 (3+5)/6-4*(3+6/8)
由于中缀比较难处理,计算机内一般先将中缀转换为后缀。
运算:碰到操作数,不运算,碰到操符,运算其前两个操作数。
中缀=>后缀
5) 迷宫问题
6) 线性链表的递归算法 一个链表=一个结点+一个链表
int fuction(NODE *p) {
if(p==NULL) return 0;
else return(function(p->next));
}
树与二叉树
一.知识点:
1.树的定义: data_struct(D,R);
其中:D中有一个根,把D和出度去掉,可以分成M个部分.
D1,D2,D3,D4,D5…DM
R1,R2,R3,R4,R5…RM
而子树Ri形成树.
1)递归定义 高度
2)结点个数=1 O --0
O O --1
2.二叉树定义: O O O O --2
结点个数>=0 此树的高度为2.
3.术语:左右孩子,双亲,子树,度,高度等概念.
4.二叉树的性质
l层次为I的二叉树 I层结点 2^I 个
l高度为H的二叉树结点 2^(H+1)-1个
lH(点)=E(边)+1
l个数为N的完全二叉树高度为|_LOG2n_|
l完全二叉树结点编号:从上到下,从左到右.
i结点的双亲: |_i/2_| |_i-1/2_| 1
i结点的左孩子: 2i 2i+1 2 3
i结点的右孩子: 2i+1 2i+2 4 5 6 7
(根)1为起点 0为起点
二叉树的存储结构:
1)扩展成为完全二叉树,以一维数组存储.
A
B C
D E F
G H I
0(数组下标)
1
2
3
4
5
6
7
8
9
10
11
12
A
B
C
D
E
F
G
H
I
2)双亲表示法
0(下标)
1
2
3
4
5
6
7
8
A(元素)
B
C
D
E
F
G
H
I
-1(双亲)
0
0
1
2
2
3
3
4
3)双亲孩子表示法
0(下标)
1
2
3
4
5
…
A(元素)
B
C
D
E
F
…
-1(双亲)
0
0
1
2
…
1(左子)
3
4
…
2(右子)
-1
5
…
结构:
typedef struct {
datatype data;
int parent;
int lchild;
int rchild;
}NODE;
NODE tree[N]; // 生成N个结点的树
4)二叉链表
5)三叉链表
6)哈夫曼树
5.二叉树的遍历
先根 /
中根 栈 中根遍历(左子树)根(右子树),再用相同的方法处理左子树,右子树.
后根 /
先,中序已知求树:先序找根,中序找确定左右子树.
层次遍历(队列实现)
6.线索二叉树(穿线树)
中序线索二树树目的:利用空指针直接得到中序遍历的结果.
手段(方法):左指针为空,指向前趋,右指针为空,指向后继.
结点结构:
ltag
Lch
Data
rch
rtag
Ltag=0,lch指向左孩子,ltag=1,指向前趋结点
Rtag=0,rch指向右孩子;rtag=1,指向后继结点
中序遍历: 1) 找最左结点(其左指针为空)
2) 当该结点的rtag=1,该结点的rch指向的就为后继
3) 当rtag=0,后继元素为右子树中最左边那个
N个结点的二树有空指针N+1个
周六我去了周SIR的办公室,他很热情,我问的是中序线索化二叉树的问题(递归),关于这个问题我会在以后的笔记中作重点补充。我在这学校从来没有碰到过像他这样热情的老师,真的,大一的时候我们学校就开了C,当时我就连#include<stdio.h>这句话的意思都不晓得,别说是让我写程序了(到这份上也不怕把丑事都斗出来了:《数据结构》的课程设计也是哈科大的littlebob兄帮我做的,很遗憾,他高程就差几分,希望他早日成功,我们都要向他学习)等于说我的C知识九成都是在大二下学期的时候学的。而且全是自学的。拿这个周末来说吧。我三天时间就看完了一本C语言大全。当然,并不是从头到尾,只是根据自己的实际情况,重点是指针和数据结构那块。C最要的便是指针。程序员考试下午试题最重要的便是递归问题(1~2道,没有掌握就没希望了哦)。我说这些并不是为了表明自己多么用功,只是希望每位“学者”都有所侧重。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=293389
- 程序员考试笔记
- 程序员考试补课笔记
- 程序员考试学习笔记
- 程序员考试笔记(1)
- 程序员考试补课笔记-第一天
- 程序员考试补课笔记-第二天
- 程序员考试补课笔记-第三天
- 程序员考试补课笔记-第四天
- 程序员考试补课笔记-第五天
- 程序员考试补课笔记-第六天
- 程序员考试补课笔记-第七天
- 程序员考试补课笔记-第八天
- 程序员考试补课笔记-第九天
- 程序员考试补课笔记-第十天
- 程序员考试补课笔记-第十一天
- 程序员考试补课笔记-第十二天
- 程序员考试补课笔记-第十三天
- 程序员考试补课笔记-第十四天
- 做树题目心得体会
- 《设计模式精解》学习笔记(十六)------总结
- Jabber学习笔记 之二
- 设计模式----Builder(生成器)模式
- 设计模式----Prototype(原形)模式
- 程序员考试笔记
- 设计模式----Composite(组合)模式
- 耳朵发热
- 设计模式----Flyweight(享元)模式
- 设计模式----Proxy(代理)模式
- 数据结构笔记
- .net精简框架集(WinCE平台下),XML反序列化成功与否与时间相关
- 设计模式----Chain of Responsibility(职责链)模式
- 考点