第一章
1、写程序实现一个函数PrintN,使得传入一个正整数为N的参数后,能顺序打印从1到N的全部正整数
void PrintN ( int N ){ int i; for ( i=1; i<=N; i++ ) printf(“%d\n”, i ); return;} //循环实现
void PrintN ( int N ){ if ( N > 0 ){ PrintN( N-1 ); printf("%d\n", N ); }} //递归实现
递归实现的函数停止工作了,为什么?
2、一元多项式实现
`方法一:秦九韶法
f(x) = a0 + x (a1+ x (a2 +… + x (an) …)
double f( int n, double a[], double x )
{ /* 计算阶数为n,系数为a[0]...a[n]的多项式在x点的值 /
int i; double p = a[n];
for (i=n; i>0; i--)
p = a[i-1] + xp; return p;}
方法二:通过循环累计求和
double f(int n,double a[],double x)
int i;
double p=a[0];
for(i=1;i<=n;i++){
p+=a[i]*pow(x,i);
return p;
}`
3、常用函数增长表
4、复杂度
(1)若两段算法分别有复杂度T1(n)=O(f1(n))和T2(n)=O(f2(n)),那么
第二章
1、汉诺塔实现方法(递归,怎么挪)
第三章
1、采用顺序存储结构直接表示一元多项式
2、堆栈的出入栈操作过程
3、如果将ABCD四个字符按顺序压入堆栈,是不是ABCD的所有。。。。。p73
4、中缀表达式转换后缀表达式p82
5、在分析一元多项式及其运算问题的基础上,引人线性表的概念及其基于顺序存储和链式存储的两种实现方法。线性表是若干数据元素组成的有序序列,其基本操作有插人、删除、查找等。基于顺序存储的线性表实现方式简单,对元素访问随机,但动态性不够,是实现静态线性数据管理的理想方式。链表存储方式对频繁增删结点且表长有较大变化的应用来说更加适合
6、堆栈是一种只在一端做插人删除的受限的线性表,具有“后进先出"的特点,主要操作包括:人栈、出栈,栈满和栈空判断。堆栈的实现可以采用顺序存储(数组)和链式存储两种方式。在实际应用中,顺序存储实现方式更加常见和方便。堆栈的应用非常广,常见的应用包括:表达式求值、函数调用和递归实现、深度优先搜索等
7、队列是一种在一端进行插人而在另一端进行删除的受限的线性表,具有“先进先出"的特点,主要操作包括:人队、出队、队满和队空判断。队列的实现也可以采用顺序存储(数组)和链式存储两种方式。顺序存储实现方式主要采用循环数组实现,其中队空和队满的判断需要特别关注。队列的应用也非常广,包括:广度优先搜索、操作系统中各种竞争性资源(如CPU)的管理、实际应用中服务资源的获得(如银行窗口服务)等。
第四章
1、顺序查找算法的时间复杂度为O(n)
2、二分查找
二分查找算法具有对数的时间复杂度O(logN)
#define NotFound 0 /* 找不到则返回0 */
Position BinarySearch( List Tbl, ElementType K )
{ /* 在顺序存储的表Tbl中查找关键字为K的数据元素 */
Position left, right, mid;
left = 1; /* 初始左边界 */
right = Tbl->Last; /* 初始右边界 */
while( left<=right )
{
mid = (left+right)/2; /* 计算中间元素坐标 */
if( K<Tbl->Data[mid] ) right = mid - 1; /* 调整右边界 */
else if( K>Tbl->Data[mid] ) left = mid + 1; /* 调整左边界 */
else return mid; /* 查找成功,返回数据元素的下标 */
}
return NotFound; /* 返回查找不成功的标识 */
}
3、先序遍历
4、后序遍历
5、层序遍历p115
6、求二叉树高度
7、给权值构造哈夫曼树
。。。
8、散列查找
9、除留余数法
10、线性探测和冲突处理p117
.。。。