数据结构

1.拦截导弹:
代码:
For i:=1 to n do read(a[i]);//依次读入导弹高度
For i:=1 to n do f[i]:=1;//依次初始化f[i],若之前没有比i高的导弹则f[i]=1
For i:=2 to n do     //f[i],表示当第i个导弹必须拦截时,前i个导弹中最多能拦截多少
  for j:=1 to i-1 do
       if (a[j]>=a[i])and(f[j]+1>f[i])//如果j的高度比i的大,并且f[j]+1>f[i]
  then  f[i]:=f[j]+1;
Ans:=0;
For i:=1 to n do
 if f[i]>ans then ans:=f[i];
Writeln(ans);
2.高精度运算:
用字符串读入数据,用数组存储数据,将字符转换成数字。
注意的问题:
(1)运算顺序:两个数靠右对齐;从低位向高位运算;先计算低位再计算高位;
(2)运算规则:同一位的两个数相加再加上从低位来的进位,成为该位的和;这个和去掉向高位的进位就成为该位的值;如上例:3+8+1=12,向前一位进1,本位的值是2;可借助MOD、DIV运算完成这一步;
(3)最后一位的进位:如果完成两个数的相加后,进位位值不为0,则应添加一位;
(4)如果两个加数位数不一样多,则按位数多的一个进行计算;
if l1<l2 then l1:=l2;
for i:=1 to l1 do
begin
x[i]:=x[i]+y[i];
x[i+1]:=x[i+1]+x[i] div 10;
x[i]:=x[i] mod 10;
end;
优化:
一个数组元素存放四位数。

数据结构:

1.栈中的每个元素称为一个frame。而最上层元素称为top frame。
栈只支持三个操作, pop, top, push。
pop取出栈中最上层元素(8),栈的最上层元素变为早先进入的元素(9)。
top查看栈的最上层元素(8)。
push将一个新的元素(5)放在栈的最上层。
2.null 值指出一个变量中没有包含有效的数据。
产生 null 的原因是:
在程序设计中是一个存在的变量的值
3.二叉树
由于二叉树的子节点比较确定,所以可以直接采用上图方式在内存中实现。每个节点有一个左子节点(left children)和右子节点(right children)。左子节点是左子树的根节点,右子节点是右子树的根节点。
如果我们给二叉树加一个额外的条件,就可以选出一个被称作二叉搜索树(binary search tree)的子集。二叉搜索树要求:每个节点都不比它左子树的任意元素小,而且不比它的右子树的任意元素大。
(如果我们假设树中没有重复的元素,那么上述要求可以写成:每个节点比它左子树的任意节点大,而且比它右子树的任意节点小)
4.堆(heap)又被为优先队列(priority queue)。堆并不是队列的子集。回忆一下,在队列中,我们限定的操作是dequeue和enqueue。其中dequeue是按照进入队列的先后顺序来取出元素。在堆中,我们不是按照元素进入队列的先后顺序取出元素的,而是按照元素的优先级取出元素。
这就好像候机的时候,无论谁先到达候机厅,总是头等舱的乘客先登机,然后是商务舱的乘客,最后是经济舱的乘客。每个乘客都有头等舱、商务舱、经济舱三种个键值(key)中的一个。头等舱->商务舱->经济舱依次享有从高到低的优先级
5.AVL树是二叉搜索树的子集。AVL树要求: 任一节点的左子树深度和右子树深度相差不超过1
6.图:
顶点的度:
无向图中,为每个顶点相连的边数。
有向图中,顶点的度分为入度和出度。
入度:以该顶点为终端点的弧的数目。
出度:以该顶点为初始点的弧的数目。

posted @ 2013-08-15 16:45  amsfe  阅读(307)  评论(0编辑  收藏  举报