PowerPoint Presentation

Size: px
Start display at page:

Download "PowerPoint Presentation"

Transcription

1 数据结构与算法 ( 三 ) 张铭主讲 采用教材 : 张铭, 王腾蛟, 赵海燕编写高等教育出版社, ( 十一五 国家级规划教材 )

2 第 3 章栈与队列 栈 栈与表达式求值 队列 栈和队列的应用 队列的应用 递归到非递归的转换 ( 补充 ) 2

3 栈 (Stack) 操作受限的线性表 运算只在表的一端进行 队列 (Queue) 运算只在表的两端进行 3

4 3.1 栈 栈定义 后进先出 (Last In First Out) 一种限制访问端口的线性表 主要操作 进栈 (push) 出栈 (pop) 应用 表达式求值 消除递归 深度优先搜索 栈顶栈底 出栈 K i+1 K i... k 1 k 0 进栈 4

5 3.1 栈 栈的抽象数据类型 template <class T> class Stack { public: // 栈的运算集 void clear(); // 变为空栈 bool push(const T item); // item 入栈, 成功返回真, 否则假 bool pop(t& item); // 返回栈顶内容并弹出, 成功返回真, 否则假 bool top(t& item); // 返回栈顶但不弹出, 成功返回真, 否则假 bool isempty(); // 若栈已空返回真 bool isfull(); // 若栈已满返回真 ; 5

6 3.1 栈 火车进出栈问题 判断火车的出栈顺序是否合法 编号为 1,2,,n 的 n 辆火车依次进站, 给定一个 n 的排列, 判断是否是合法的出站顺序? 5, 4, 3, 2, 1 1, 2, 3, 4, 5 B A 6 车站

7 3.1 栈 利用合法的重构找冲突

8 3.1 栈 思考 若入栈的顺序为 1,2,3,4, 那么出栈的顺序可以有哪些? 从初始输入序列 1,2,,n, 希望利用一个栈得到输出序列 p 1,p 2,,p n ( 它们是 1, 2,,n 的一种排列 ) 若存在下标 i,j,k, 满足 i<j<k 同时 P j <P k <P i, 则输出序列是否合法? 8

9 3.1 栈 栈的实现方式 顺序栈 (Array-based Stack) 使用向量实现, 本质上是顺序表的简化版 栈的大小 关键是确定哪一端作为栈顶 上溢, 下溢问题 链式栈 (Linked Stack) 用单链表方式存储, 其中指针的方向是从栈顶向下链接 9

10 3.1.1 顺序栈 顺序栈的类定义 template <class T> class arrstack : public Stack <T> { private: // 栈的顺序存储 int msize; // 栈中最多可存放的元素个数 int top; // 栈顶位置, 应小于 msize T *st; // 存放栈元素的数组 public: // 栈的运算的顺序实现 arrstack(int size) { // 创建一个给定长度的顺序栈实例 msize = size; top = -1; st = new T[mSize]; arrstack() { // 创建一个顺序栈的实例 top = -1; ~arrstack() { delete [] st; void clear() { top = -1; // 清空栈 10

11 3.1.1 顺序栈 顺序栈 按压入先后次序, 最后压入的元素编号为 4, 然后依次为 3,2,1 栈顶栈底

12 3.1.1 顺序栈 上溢 (Overflow) 顺序栈的溢出 当栈中已经有 maxsize 个元素时, 如果再做进栈运算, 所产生的现象 下溢 (Underflow) 对空栈进行出栈运算时所产生的现象 12

13 3.1.1 顺序栈 压入栈顶 bool arrstack<t>::push(const T item) { if (top == msize-1) { // 栈已满 cout << " 栈满溢出 " << endl; return false; else { // 新元素入栈并修改栈顶指针 st[++top] = item; return true; 13

14 3.1.1 顺序栈 从栈顶弹出 bool arrstack<t>::pop(t & item) { // 出栈 if (top == -1) { // 栈为空 cout << " 栈为空, 不能执行出栈操作 "<< endl; return false; else { item = st[top--]; // 返回栈顶, 并缩减 1 return true; 14

15 3.1.2 链式栈 用单链表方式存储 链式栈的定义 指针的方向从栈顶向下链接 栈顶 K n-1 K n-2 K 1 K 0 15

16 3.1.2 链式栈 链式栈的创建 template <class T> class lnkstack : public Stack <T> { private: // 栈的链式存储 Link<T>* top; // 指向栈顶的指针 int size; // 存放元素的个数 public: // 栈运算的链式实现 lnkstack(int defsize) { // 构造函数 top = NULL; size = 0; ~lnkstack() { // 析构函数 clear(); 16

17 3.1.2 链式栈 压入栈顶 // 入栈操作的链式实现 bool lnksstack<t>:: push(const T item) { Link<T>* tmp = new Link<T>(item, top); top = tmp; size++; return true; Link(const T info, Link* nextvalue) {// 具有两个参数的 Link 构造函数 data = info; next = nextvalue; 17

18 3.1.2 链式栈 从单链栈弹出元素 // 出栈操作的链式实现 bool lnkstack<t>:: pop(t& item) { Link <T> *tmp; if (size == 0) { cout << " 栈为空, 不能执行出栈操作 "<< endl; return false; item = top->data; tmp = top->next; delete top; top = tmp; size--; return true; 18

19 3.1 栈 时间效率 顺序栈和链式栈的比较 所有操作都只需常数时间 顺序栈和链式栈在时间效率上难分伯仲 空间效率 顺序栈须说明一个固定的长度 链式栈的长度可变, 但增加结构性开销 19

20 3.1 栈 顺序栈和链式栈的比较 实际应用中, 顺序栈比链式栈用得更广泛 顺序栈容易根据栈顶位置, 进行相对位移, 快速定位并读取栈的内部元素 顺序栈读取内部元素的时间为 O(1), 而链式栈则需要沿着指针链游走, 显然慢些, 读取第 k 个元素需要时间为 O(k) 一般来说, 栈不允许 读取内部元素, 只能在栈顶操作 20

21 3.1 栈 思考 : STL 中关于栈的函数 top 函数表示取栈顶元素, 将结果返回给用户 pop 函数表示将栈顶元素弹出 ( 如果栈不空 ) pop 函数仅仅是一个操作, 并不将结果返回 pointer = astack.pop()? 错误! STL 为什么这两个操作分开? 为什么不提供 ptop? 21

22 3.1 栈 栈的特点 : 后进先出 栈的应用 体现了元素之间的透明性 常用来处理具有递归结构的数据 深度优先搜索 表达式求值 子程序 / 函数调用的管理 消除递归 22

23 3.1 栈 表达式的递归定义 计算表达式的值 基本符号集 :{0,1,,9,+,-,*,/,(,) 语法成分集 :{< 表达式 >, < 项 >, < 因子 >, < 常数 >, < 数字 > 中缀表达式 23+(34*45)/(5+6+7) 后缀表达式 * / + 23

24 3.1 栈 中缀表达式 中缀表达式 4 * x * (2 * x + a) c 运算符在中间 需要括号改变优先级 * - c * + * 4 x a 2 x 24

25 3.1 栈 中缀表达法的语法公式 < 表达式 > = < 项 > + < 项 > < 项 > - < 项 > < 项 > < 项 > = < 因子 > * < 因子 > < 因子 > / < 因子 > < 因子 > < 因子 > = < 常数 > ( < 表达式 > ) < 常数 > = < 数字 > < 数字 > < 常数 > < 数字 > =

26 3.1 栈 表达式的递归图示 表达式 项 因子 项 + - 因子 * / ( 表达式 ) 数字 26

27 3.1 栈 后缀表达式 后缀表达式 4 x * 2 x * a + * c 运算符在后面 完全不需要括号 * - c * + 4 x a * 2 x 27

28 3.1 栈 后缀表达式 < 表达式 > = < 项 > < 项 > + < 项 > < 项 > - < 项 > < 项 > = < 因子 > < 因子 > * < 因子 > < 因子 > / < 因子 > < 因子 > = < 常数 > < 常数 > = < 数字 > < 数字 > < 常数 > < 数字 > =

29 3.1 栈 后缀表达式的计算 * / + =? 计算特点? 中缀和后缀表达式的主要异同? * 45 / ( ) =? * / + =? 29

30 待处理后缀表达式 : * / + 栈状态的变化 计算结果

31 3.1 栈 后缀表达式求值 循环 : 依次顺序读入表达式的符号序列 ( 假设以 = 作为输入序列的结束 ), 并根据读入的元素符号逐一分析 1. 当遇到的是一个操作数, 则压入栈顶 2. 当遇到的是一个运算符, 就从栈中两次取出栈顶, 按照运算符对这两个操作数进行计算 然后将计算结果压入栈顶 如此继续, 直到遇到符号 =, 这时栈顶的值就是输入表达式的值 31

32 3.1 栈 后缀计算器的类定义 class Calculator { private: Stack<double> s; // 这个栈用于压入保存操作数 // 从栈顶弹出两个操作数 opd1 和 opd2 bool GetTwoOperands(double& opd1,double& opd2); // 取两个操作数, 并按 op 对两个操作数进行计算 void Compute(char op); public: Calculator(void){ ; // 创建计算器实例, 开辟一个空栈 void Run(void); // 读入后缀表达式, 遇 = 符号结束 void Clear(void); // 清除计算器, 为下一次计算做准备 ; 32

33 3.1 栈 后缀计算器的类定义 template <class ELEM> bool Calculator<ELEM>::GetTwoOperands(ELEM& opnd1, ELEM& opnd2) { if (S.IsEmpty()) { cerr << "Missing operand!" <<endl; return false; opnd1 = S.Pop(); // 右操作数 if (S.IsEmpty()) { cerr << "Missing operand!" <<endl; return false; opnd2 = S.Pop(); // 左操作数 return true; 33

34 3.1 栈 后缀计算器的类定义 template <class ELEM> void Calculator<ELEM>::Compute(char op) { bool result; ELEM operand1, operand2; result = GetTwoOperands(operand1, operand2); if (result == true) switch(op) { case '+' : S.Push(operand2 + operand1); break; case '-' : S.Push(operand2 - operand1); break; case '*' : S.Push(operand2 * operand1); break; case '/' : if (operand1 == 0.0) { cerr << "Divide by 0!" << endl; S.ClearStack(); else S.Push(operand2 / operand1); break; else S.ClearStack(); 34

35 3.1 栈 后缀计算器的类定义 template <class ELEM> void Calculator<ELEM>::Run(void) { char c; ELEM newoperand; while (cin >> c, c!= '=') { switch(c) { case '+': case '-': case '*': case '/': Compute(c); break; default: cin.putback(c); cin >> newoperand; Enter(newoperand); break; if (!S.IsEmpty()) cout << S.Pop() << endl; // 印出求值的最后结果 35

36 目录页 思考 1. 栈往往用单链表实现 可以用双链表吗? 哪个更好? 2. 请总结前缀表达式的性质, 以及求值过程 36

37 第 3 章栈与队列 栈 栈与表达式求值 队列 栈和队列的应用 队列的应用 递归到非递归的转换 ( 补充 ) 37

38 3.2 队列 队列的定义 先进先出 (First In First Out) 限制访问点的线性表 按照到达的顺序来释放元素 所有的插入在表的一端进行, 所有的删除都在表的另一端进行 主要元素 队头 (front) 队尾 (rear) 38

39 3.2 队列 队列的主要操作 入队列 (enqueue) 出队列 (dequeue) 取队首元素 (getfront) 判断队列是否为空 (isempty) 39

40 3.2 队列 队列的抽象数据类型 template <class T> class Queue { public: // 队列的运算集 void clear(); // 变为空队列 bool enqueue(const T item); // 将 item 插入队尾, 成功则返回真, 否则返回假 bool dequeue(t & item) ; // 返回队头元素并将其从队列中删除, 成功则返回真 bool getfront(t & item); // 返回队头元素, 但不删除, 成功则返回真 bool isempty(); // 返回真, 若队列已空 bool isfull(); // 返回真, 若队列已满 ; 40

41 3.2 队列 顺序队列 队列的实现方式 关键是如何防止假溢出 链式队列 用单链表方式存储, 队列中每个元素对于链表中的一个结点 41

42 3.2 队列 队列示意 : 环形 ( 实指 ) Q.front Q.rear Q.front Q.rear Q.rear k 1 k 0 k 2 k 3 k 6 Q.rear k 4 k 5 Q.rear 空队列 Q.rear Q.rear 42

43 3.2.1 顺序队列 顺序队列的类定义 class arrqueue: public Queue<T> { private: int msize; // 存放队列的数组的大小 int front; // 表示队头所在位置的下标 int rear; // 表示队尾所在位置的下标 T * qu; // 存放类型为 T 的队列元素的数组 public: // 队列的运算集 arrqueue(int size); // 创建队列的实例 ~arrqueue(); // 消除该实例, 并释放其空间 43

44 3.2.1 顺序队列 顺序队列的维护 rear 实指 front front rear rear A B C B D C D 插入删除 44

45 3.2.1 顺序队列 顺序队列的维护 front 和 rear 都实指 45

46 3.2.1 顺序队列 顺序队列代码实现 template <class Elem> class Aqueue : public Queue<Elem> { private: int size; // 队列的最大容量 int front; // 队首元素指针 int rear; // 队尾元素指针 Elem *listarray; // 存储元素的数组 public: AQueue(int sz=defaultlistsize) { // 让存储元素的数组多预留一个空位 size = sz+1; // size 数组长,sz 队列最大长度 rear = 0; front = 1; // 也可以 rear=-1; front=0 listarray = new Elem[size]; ~AQueue() { delete [] listarray; void clear() { front = rear+1; 46

47 3.2.1 顺序队列 顺序队列代码实现 bool enqueue(const Elem& it) { if (((rear+2) % size) == front) return false; // 还剩一个空位, 就要报满 rear = (rear+1) % size; // 因为实指, 需要先移动到下一个空位 listarray[rear] = it; return true; bool dequeue(elem& it) { if (length() == 0) return false; // 队列为空 it = listarray[front]; // 先出队, 再移动 front 下标 front = (front+1) % size; // 环形增加 return true; 47

48 3.2.1 顺序队列 顺序队列代码实现 bool frontvalue(elem& it) const { if (length() == 0) return false; // 队列为空 it = listarray[front]; return true; int length() const { return (size +(rear - front + 1)) % size; 48

49 3.2.1 顺序队列 思考 1. 只是用 front, rear 两个变量, 长度为 msize = n 的队列, 可以容纳的最大元素个数为多少? 请给出详细的推导过程 2. 如果不愿意浪费队列的存储单元, 还可以采用什么方法? 49

50 3.2.2 链式队列 链式队列的表示 单链表队列 链接指针的方向是从队列的前端向尾端链接 f r k 0 k 1 k 2. k n-1 50

51 3.2.2 链式队列 链式队列的类定义 template <class T> class lnkqueue: public Queue<T> { private: int size; // 队列中当前元素的个数 Link<T>* front; // 表示队头的指针 Link<T>* rear; // 表示队尾的指针 public: // 队列的运算集 lnkqueue(int size); // 创建队列的实例 ~lnkqueue(); // 消除该实例, 并释放其空间 51

52 3.2.2 链式队列 链式队列代码实现 bool enqueue(const T item) { // item 入队, 插入队尾 if (rear == NULL) { // 空队列 front = rear = new Link<T> (item, NULL); else { // 添加新的元素 rear-> next = new Link<T> (item, NULL); rear = rear ->next; size++; return true; 52

53 bool dequeue(t* item) { Link<T> *tmp; if (size == 0) { 第三章 链式队列代码实现 cout << " 队列为空 " << endl; return false; *item = front->data; tmp = front; front = front -> next; delete tmp; if (front == NULL) rear = NULL; size--; return true; 链式队列 // 返回队头元素并从队列中删除 // 队列为空, 没有元素可出队 53

54 3.2.2 链式队列 顺序队列与链式队列的比较 顺序队列 固定的存储空间 链式队列 可以满足大小无法估计的情况 都不允许访问队列内部元素 54

55 3.2 队列 队列的应用 只要满足先来先服务特性的应用均可采用队列作为其数据组织方式或中间数据结构 调度或缓冲 消息缓冲器 邮件缓冲器 计算机硬设备之间的通信也需要队列作为数据缓冲 操作系统的资源管理 宽度优先搜索 55

56 Q.front 思考 Q.rear 链式队列往往用单链表 为什么不用双链表来实现? k 1 k 0 若采用虚指方法实现队尾指针 (rear 指向队尾元素后一个元素, 和实指相比后移一位 ), 在具体实现上有何异同? 哪一种更好? 56

57 第 3 章栈与队列 栈 栈与表达式求值 队列 栈和队列的应用 队列的应用 递归到非递归的转换 ( 补充 ) 57

58 队列的应用 农夫过河问题 问题抽象 : 人狼羊菜 乘船过河 只有人能撑船, 船只有两个位置 ( 包括人 ) 狼羊 羊菜不能在没有人时共处 人羊狼菜人狼菜人羊狼人羊菜 人羊 狼菜狼菜羊空 ( 成功 ) 58

59 队列的应用 人羊 1111 人 人 人狼菜羊人羊 1101 人羊 人菜 1110 空 ( 成功 ) 人狼 59 人狼菜 0100 人羊 菜 羊 狼菜 人羊菜 ( 人狼菜羊 ) 狼菜 ( 人狼菜 ) 菜 ( 人菜羊 ) 羊 ( 人羊 ) 空 算法示意 人羊 人狼 人羊 人菜 人 人羊 人 人狼菜羊 ( 人菜羊 ) 羊 ( 人狼羊 ) 狼 ( 人狼菜 ) 狼菜 ( 人狼菜 ) 人狼菜羊

60 目录页队列的应用 问题分析 广度优先 :(m 种状态 ) A 1 A 2 A 3 A m A 11 A 12 A 1n A 21 A 22 A 3 A 211 A 21 深度优先 :(m 种状态 ) A 2 A 111 A 11 A 1 60

61 队列的应用 数据抽象 每个角色的位置进行描述 农夫 狼 菜和羊, 四个目标各用一位 ( 假定按照农夫 狼 白菜 羊次序 ), 目标在起始岸位置 :0, 目标岸 : 如 0101 表示农夫 白菜在起始岸, 而狼 羊在目标岸 ( 此状态为不安全状态 ) 61

62 队列的应用 数据的表示 用整数 status 表示上述四位二进制描述的状态 整数 0x08 表示的状态 整数 0x0F 表示的状态 如何从上述状态中得到每个角色所在位置? 函数返回值为真 (1), 表示所考察人或物在目标岸 否则, 表示所考察人或物在起始岸 62

63 队列的应用 确定每个角色位置的函数 bool farmer(int status) { return ((status & 0x08)!= 0); 人狼菜羊 1 x x x bool wolf(int status) { return ((status & 0x04)!= 0); x 1 x x bool cabbage(int status) { return ((status & 0x02)!= 0); x x 1 x bool goat(int status) { return ((status & 0x01)!= 0); x x x 1 63

64 队列的应用 安全状态的判断 人 狼 菜 羊 bool safe(int status) { if ((goat(status) == cabbage(status)) && (goat(status)!= farmer(status))) return(false); // 羊吃白菜 if ((goat(status) == wolf(status)) && (goat(status)!= farmer(status))) return(false); // 狼吃羊 return(true); // 返回 true: 安全,false: 不安全 // 其它状态为安全 64

65 队列的应用 算法抽象 问题变为从状态 0000( 整数 0) 出发, 寻找全部由安全状态构成的状态序列, 以状态 1111 ( 整数 15) 为最终目标 状态序列中每个状态都可以从前一状态通过农夫 ( 可以带一样东西 ) 划船过河的动作到达 序列中不能出现重复状态 65

66 队列的应用 算法设计 定义一个整数队列 moveto, 它的每个元素表示一个可以安全到达的中间状态 还需要定义一个数据结构记录已被访问过的各个状态, 以及已被发现的能够到达当前这个状态的路径 用顺序表 route 的第 i 个元素记录状态 i 是否已被访问过 若 route[i] 已被访问过, 则在这个顺序表元素中记入前驱状态值 ; -1 表示未被访问 route 的大小 ( 长度 ) 为 16 66

67 算法实现 void solve() { int movers, i, location, newlocation; vector<int> route(end+1, -1); // 记录已考虑的状态路径 queue<int> moveto; // 准备初值 moveto.push(0x00); route[0]=0; 67

68 算法实现 while (!moveto.empty() && route[15] == -1) { // 得到现在的状态 status = moveto.front(); moveto.pop(); for (movers = 1; movers <= 8; movers <<= 1) { // 农夫总是在移动, 随农夫移动的也只能是在农夫同侧的东西 if (farmer(status) == (bool)(status & movers)) { newstatus = status ^ (0x08 movers); // 安全的, 并且未考虑过的走法 if (safe(newstatus) && (route[newstatus] == -1)) { route[newstatus] = status; moveto.push(newstatus); 68 人狼菜羊

69 算法实现 // 反向打印出路径 if (route[15]!= -1) { cout << "The reverse path is : << endl; for (int status = 15; status >= 0; status = route[status]) { cout << "The status is : << status << endl; if (status == 0) break; else cout << "No solution. << endl; 69

70 队列的应用 人羊 1111 人 人 人狼菜羊人羊 1101 人羊 人菜 1110 空 ( 成功 ) 人狼 70 人狼菜 0100 人羊 菜 羊 狼菜 人羊菜 ( 人狼菜羊 ) 狼菜 ( 人狼菜 ) 菜 ( 人菜羊 ) 羊 ( 人羊 ) 空 算法示意 人羊 人狼 人羊 人菜 人 人羊 人 人狼菜羊 ( 人菜羊 ) 羊 ( 人狼羊 ) 狼 ( 人狼菜 ) 狼菜 ( 人狼菜 ) 人狼菜羊

71 例题讲解 思考 : 另一个小游戏 五人提灯过独木桥 : 有一盏灯能使用 30 秒, 要在灯熄灭前过这座桥 ; 一家五口人每个人过桥的速度不同 : 哥哥 1 秒, 弟弟 3 秒, 爸爸 6 秒, 妈妈 8 秒, 奶奶 12 秒 ; 每次只能过两个人 过去后, 对岸要有一个人再把灯送回来 71

72 第 3 章栈与队列 栈 队列 栈和队列的应用 队列的应用 递归到非递归的转换 ( 补充 ) 72

73 递归转非递归 递归函数调用原理 机械的递归转换 优化后的非递归函数 73

74 递归调用原理 递归的再研究 阶乘 f n = 递归出口 n f(n 1) n 1 1 n = 0 递归终止的条件, 即最小子问题的求解 可以允许多个出口 递归规则 ( 递归体 + 界函数 ) 将原问题划分成子问题 保证递归的规模向出口条件靠拢 74

75 递归算法的非递归实现 f n = 阶乘的非递归方式 - 建立迭代 递归调用原理 - 递归转换为非递归 n f(n 1) n 1 1 n = 0 以 Hanoi 塔为例呢? 75

76 递归调用原理 河内塔问题的递归求解程序 hanoi(n,x,y,z) 移动 n 个槃环 X 柱出发, 将槃环移动到 Z 柱 X Y Z 都可以暂存 大盘不能压小盘 例如, hanoi(2, B, C, A ) B 柱上部的 2 个环槃移动到 A 柱 76

77 3.1.3 递归转非递归 void hanoi(int n, char X, char Y, char Z) { if (n <= 1) move(x,z); else { // X 上最大的不动, 其他 n-1 个环槃移到 Y hanoi(n-1,x,z,y); move(x,z); // 移动最大环槃到 Z, 放好 hanoi(n-1,y,x,z); // 把 Y 上的 n-1 个环槃移到 Z void move(char X, char Y) // 把柱 X 的顶部环槃移到柱 Y { cout << "move" << X << "to" << Y << endl; 77

78 3.1.3 递归转非递归 Hanoi 递归子程序的运行示意图 出栈 进栈 执行 hanoi 程序的指令流 通过内部栈和子程序交换信息 栈顶 栈底 K i+1 K i... k 1 k 0 78

79 79 目录页第三章栈与队列 H A,B,C H A,C,B 递归调子程序 3 2 递归调子程序 H A,B,C 1 调子程序 move(a,c) 返回 move(a,b) H C,A,B 1 调子程序 move(c,b) 返回返回 move(a,c) H B,A,C 2 H B,C,A 1 调子程序 move(b,a) 返回 move(b,c) H A,B,C 1 调子程序 move(a,c) 返回返回完成 Hanoi (3,A,B,C) 递归转非递归

80 递归调 子程序 3 H A,B,C 返回 完成 Hanoi(3,A,B,C) 80 2 递归调子程序 H A,C,B 返回 move(a,c) 2 H B,A,C 返回 返回 返回 返回 1 H A,B,C 1 move(a,b) H C,A,B 1 H B,C,A 1 move(b,c) H A,B,C 调子程序 调子程序 调子程序 调子程序 move(a,c) move(c,b) move(b,a) move(a,c)

81 3.1.3 递归转非递归 递归运行时, 堆栈的进退以及通过堆栈传递参数 hanoi(1,a,b,c) hanoi(1,b,c,a) hanoi(2,b,a,c) hanoi(1,c,a,b) hanoi(1,a,b,c) hanoi(2,a,c,b) hanoi(3,a,b,c) 1,C,A,B 1,B,C,A 1,A,B,C 2,A,C,B 2,B,A,C 3,A,B,C 执行 move(a,c) move(a,b) move(b,a) move(c,b) move(b,c) 81

82 fu( n ) 递归转非递归 一个递归数学公式 n 1 fu( n / 2 )* fu( 当 n 2 时 n / 4 ) n 2 时 82

83 3.1.3 递归转非递归 int f(int n) { 递归函数示例 fu( n if (n<2) return n+1; else return f(n/2) * f(n/4); ) n 1 当 n 2 时 fu( n / 2 )* fu( n / 4 ) n 2 时 83

84 3.1.3 递归转非递归 递归函数示例 ( 转换一下 ) void exmp(int n, int& f) { int u1, u2; if (n<2) f = n+1; else { exmp((int)(n/2), u1); exmp((int)(n/4), u2); f = u1*u2; fu( n ) n 1 当 n 2 时 fu( n / 2 )* fu( n / 4 ) n 2 时 84

85 3.1.3 递归转非递归 函数运行时的动态存储分配 栈 (stack) 用于分配后进先出 LIFO 的数据 如函数调用 堆 (heap) 用于不符合 LIFO 的 如指针所指向空间的分配 代码区域 代码区域 全程静态区域 / 栈 自由空间 堆 85

86 3.1.3 递归转非递归 函数调用及返回的步骤 调用 保存调用信息 ( 参数, 返回地址 ) 分配数据区 ( 局部变量 ) 控制转移给被调函数的入口 返回 保存返回信息 释放数据区 控制转移到上级函数 ( 主调用函数 ) 主流程 函数函数 函数 86

87 3.1.3 递归转非递归 函数执行过程图解 u1=f=2 fu ( Exmp(7,&f) n ) f=u1*u2=4 u2=f=2 n 1 fu( 当 n 2 时 n / 2 )* fu( n / 4 ) n 2 时 f=u1*u2=2 u1=f=2 Exmp(3,&f) u2=f=1 Exmp(1,&f) f=2 f=2 Exmp(1,&f) Exmp(0,&f) f=1 87

88 3.1.3 递归转非递归 用栈模拟递归调用过程 后调用, 先返回 (LIFO), 所以用栈 void exmp(int n, int& f) { int u1, u2; if (n<2) f = n+1; else { exmp((int)(n/2), u1); exmp((int)(n/4), u2); f = u1*u2; rd=1: rd=2: n=1 n=0 f=2 f=? f=1 u1=? u2=? rd=1: rd=2: n=3 n=1 f=? f=2 u1=2 u1=? u2=? u2=1 rd=3: n=7 f=? u1=? u1=2 u2=? u2=2 88

89 思考 对以下函数, 请画出 n=4 情况下的递归树, 并用栈模拟递归的调用过程 阶乘函数 2 阶斐波那契函数 f 0 =0, f 1 =1, f n = f n-1 + f n-2 89

90 第 3 章栈与队列 栈 栈的应用 递归到非递归的转换 队列 90

91 递归转非递归 递归函数调用原理 机械的递归转换 优化后的非递归函数 91

92 递归转换为非递归的方法 机械方法 (2) 机械的递归转换 fu( n) 1. 设置一工作栈当前工作记录 2. 设置 t+2 个语句标号 3. 增加非递归入口 4. 替换第 i (i = 1,, t) 个递归规则 5. 所有递归出口处增加语句 :goto label t+1; 6. 标号为 t+1 的语句的格式 7. 改写循环和嵌套中的递归 8. 优化处理 n 1 fu( 当 n 2 时 n / 2 )* fu( n / 4 rd=2: n=0 f=? u1=? u2=? rd=1: n=3 f=? u1=? u1=2 u2=? rd=3: n=7 f=? u1=? u2=? ) n 2 时 92

93 (2) 机械的递归转换 1. 设置一工作栈记录当前工作记录 在函数中出现的所有参数和局部变量都必须用栈中相应的数据成员代替 返回语句标号域 (t+2 个数值 ) 函数参数 ( 值参 引用型 ) 局部变量 typedef struct elem { // 栈数据元素类型 int rd; Datatypeofp1 p1; Datatypeofpm pm; Datatypeofq1 q1; ELEM; Datatypeofqn qn; // 返回语句的标号 // 函数参数 // 局部变量 93

94 (2) 机械的递归转换 2. 设置 t+2 个语句标号 label 0 : 第一个可执行语句 label t+1 : 设在函数体结束处 label i (1<=i<=t): 第 i 个递归返回处 94

95 (2) 机械的递归转换 // 入栈 3. 增加非递归入口 S.push(t+1,p1,,pm,q1, qn); 95

96 (2) 机械的递归转换 4. 替换第 i (i=1,,t) 个递归规则 假设函数体中第 i (i=1,, t) 个递归调用语句为 : recf(a1, a2,,am); 则用以下语句替换 : S.push(i, a1,, am); // 实参进栈 goto label 0;.. label i: x = S.top();S.pop(); /* 退栈, 然后根据需要, 将 x 中某些值赋给栈顶的工作记录 S.top () 相当于把引用型参数的值回传给局部变量 */ 主流程 函数 函数 函数 96

97 (2) 机械的递归转换 5. 所有递归出口处增加语句 goto label t+1; 97

98 (2) 机械的递归转换 6. 标号为 t+1 的语句 switch ((x=s.top ()).rd) { case 0 : goto label 0; break; case 1 : goto label 1; break;. case t+1 : item = S.top(); S.pop(); // 返回 break; default : break; 98

99 (2) 机械的递归转换 7. 改写循环和嵌套中的递归 对于循环中的递归, 改写成等价的 goto 型循环 对于嵌套递归调用 例如,recf ( recf()) 改为 : exmp 1 = recf ( ); exmp 2 = recf (exmp 1 ); exmp k = recf (exmp k-1 ) 然后应用规则 4 解决 99

100 (2) 机械的递归转换 进一步优化 8. 优化处理 去掉冗余进栈 / 出栈 根据流程图找出相应的循环结构, 从而消去 goto 语句 100

101 (2) 机械的递归转换 数据结构定义 fu( n) n 1 当 n 2 时 fu( n / 2 )* fu( n / 4 ) n 2 时 typedef struct elem { int rd, pn, pf, q1, q2; ELEM; class nonrec { ; private: stack <ELEM> S; public: nonrec(void) { // constuctor void replace1(int n, int& f); rd=2: n=0 f=? u1=? u2=? rd=1: n=3 f=? u1=? u1=2 u2=? rd=3: n=7 f=? u1=? u2=? 101

102 (2) 机械的递归转换 递归入口 void nonrec::replace1(int n, int& f) { ELEM x, tmp x.rd = 3; x.pn = n; S.push(x); // 压在栈底作 监视哨 label0: if ((x = S.top()).pn < 2) { S.pop( ); x.pf = x.pn + 1; S.push(x); goto label3; 102

103 (2) 机械的递归转换 第一个递归语句 fu( n) x.rd = 1; // 第一处递归 x.pn = (int)(x.pn/2); S.push(x); goto label0; label1: tmp = S.top(); S.pop(); x = S.top(); S.pop(); x.q1 = tmp.pf; // 修改 u1=pf S.push(x); n 1 当 n 2 时 fu( 主流程 n / 2 )* fu( n / 4 函数函数 函数 ) n 2 时 103

104 (2) 机械的递归转换 第二个递归语句 x.pn = (int)(x.pn/4); x.rd = 2; S.push(x); goto label0; label2: tmp = S.top(); S.pop(); x = S.top(); S.pop(); x.q2 = tmp.pf; x.pf = x.q1 * x.q2; S.push(x); 104

105 (2) 机械的递归转换 label3: x = S.top(); switch(x.rd) { case 1 : goto label1; break; case 2 : goto label2; break; case 3 : tmp = S.top(); S.pop(); f = tmp.pf; // 计算结束 break; default : cerr << "error label number in stack"; break; 105

106 (3) 优化后的非递归函数 优化后的非递归算法 void nonrec::replace2(int n, int& f) { ELEM x, tmp; // 入口信息 x.rd = 3; x.pn = n; S.push(x); do { // 沿左边入栈 while ((x=s.top()).pn >= 2){ x.rd = 1; x.pn = (int)(x.pn/2); S.push(x); 106

107 (3) 优化后的非递归函数 x = S.top(); S.pop(); // 原出口,n <= 2 x.pf = x.pn + 1; S.push(x); // 如果是从第二个递归返回, 则上升 while ((x = S.top()).rd==2) { tmp = S.top(); S.pop(); x = S.top(); S.pop(); x.pf = x.q * tmp.pf; S.push(x); 107

108 (3) 优化后的非递归函数 if ((x = S.topValue()).rd == 1) { tmp = S.top(); S.pop(); x = S.top(); S.pop(); x.q = tmp.pf; S.push(x); tmp.rd = 2; // 进入第二个递归 tmp.pn = (int)(x.pn/4); S.push(tmp); while ((x = S.top()).rd!= 3); x = S.top(); S.pop(); f = x.pf; 108

109 递归转非递归的性能实验 快排的时间对照 ( 单位 ms) 方法 数据量 递归快排 机械方法的非递归快排 非机械方法的非递归快排 STL 中的 sort 注 : 测试环境 Intel Core Duo CPU T2350 内存 512MB 操作系统 Windows XP SP2 编程环境 Visual C

110 递归转非递归的性能实验 递归与非递归处理问题的规模 递归求 f(x): int f(int x) { if (x==0) return 0; return f(x-1)+1; 在默认设置下, 当 x 超过 11,772 时会出现堆栈溢出 非递归求 f(x), 栈中元素记录当前 x 值和返回值 在默认设置下, 当 x 超过 32,375,567 时会出现错误 110

111 用机械的转换方法 阶乘函数 2 阶斐波那契函数 思考 f 0 =0, f 1 =1, f n = f n-1 + f n-2 Hanoi 塔算法 111

112 数据结构与算法 谢谢聆听 国家精品课 数据结构与算法 张铭, 王腾蛟, 赵海燕高等教育出版社, 十一五 国家级规划教材

PowerPoint Presentation

PowerPoint Presentation 数据结构与算法 ( 三 ) 张铭主讲 采用教材 : 张铭, 王腾蛟, 赵海燕编写高等教育出版社,2008. 6 ( 十一五 国家级规划教材 ) http://www.jpk.pku.edu.cn/pkujpk/course/sjjg 第 3 章栈与队列 栈 栈的应用 递归到非递归的转换 队列 2 栈 (Stack) 操作受限的线性表 运算只在表的一端进行 队列 (Queue) 运算只在表的两端进行

More information

Microsoft PowerPoint - 3栈和队列.ppt [兼容模式]

Microsoft PowerPoint - 3栈和队列.ppt [兼容模式] 队列的类型定义 定义 队列是必须在一端删除 ( 队头 front), 在另一端插入 ( 队尾 rear) 的线性表 特性 先进先出 (FIFO, First In First Out) rear front 117 队列的类型定义 ADT Queue{ 数据对象 : 具有线形关系的一组数据操作 : bool EnQueue(Queue &Q, ElemType e); // 入队 bool DeQueue(Queue

More information

PowerPoint Presentation

PowerPoint Presentation 数据结构与算法 ( 一 ) 张铭主讲 采用教材 : 张铭, 王腾蛟, 赵海燕编写高等教育出版社,2008. 6 ( 十一五 国家级规划教材 ) http://www.jpk.pku.edu.cn/pkujpk/course/sjjg 第 1 章概论 问题求解 数据结构及抽象数据类型 算法的特性及分类 算法的效率度量 数据结构的选择和评价 2 1.1 问题求解 问题求解 设计方法 编写计算机程序的目的?

More information

PowerPoint Presentation

PowerPoint Presentation 数据结构与算法 ( 六 ) 张铭主讲 采用教材 : 张铭, 王腾蛟, 赵海燕编写高等教育出版社,2008. 6 ( 十一五 国家级规划教材 ) http://www.jpk.pku.edu.cn/pkujpk/course/sjjg 第 6 章树 C 树的定义和基本术语 树的链式存储结构 子结点表 表示方法 静态 左孩子 / 右兄弟 表示法 动态表示法 动态 左孩子 / 右兄弟 表示法 父指针表示法及其在并查集中的应用

More information

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1 C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1 1 CARDGAME 1 CardGame 题目描述 桌上有一叠牌, 从第一张牌 ( 即位于顶面的牌 ) 开始从上往下依次编号为 1~n 当至少还剩两张牌时进行以下操作 : 把第一张牌扔掉, 然后把新的第一张放到整叠牌的最后 请模拟这个过程, 依次输出每次扔掉的牌以及最后剩下的牌的编号 输入 输入正整数 n(n

More information

2.3 链表

2.3  链表 数据结构与算法 ( 二 ) 张铭主讲 采用教材 : 张铭, 王腾蛟, 赵海燕编写高等教育出版社,2008. 6 ( 十一五 国家级规划教材 ) https://pkumooc.coursera.org/bdsalgo-001/ 第二章线性表 2.1 线性表 2.2 顺序表 tail head a 0 a 1 a n-1 2.4 顺序表和链表的比较 2 链表 (linked list) 通过指针把它的一串存储结点链接成一个链

More information

数据结构 Data Structure

数据结构 Data Structure 数据结构 : 线性表 Data Structure 2016 年 3 月 15 日星期二 1 线性表 栈和队列 线性表 字典 ADT 栈 队列 2016 年 3 月 15 日星期二 2 线性表 定义 : 线性表 L 是 n 个数据元素 a 0,a 1, a n-1 的有限序列, 记作 L=(a 0,a 1, a n-1 ) 其中元素个数 n(n 0) 定义为表 L 的长度 当 n=0 时,L 为空表,

More information

Microsoft PowerPoint - ch3.pptx

Microsoft PowerPoint - ch3.pptx 第 3 章栈和队列 第 3 章栈和队列 3.1 栈 3.2 栈的应用举例 3.3 队列 哈尔滨工业大学 ( 威海 ) 计算机科学与技术学院 (2014/2015 学年秋季版 ) 1 本章重点难点 第 3 章栈和队列 重点 : (1) 栈 队列的定义 特点 性质和应用 ;(2)AT 栈 AT 队列的设计和实现以及基本操作及相关算法 难点 : (1) 循环队列中对边界条件的处理 ;(2) 分析栈和队列在表达式求值

More information

ebook39-6

ebook39-6 6 first-in-first-out, FIFO L i n e a r L i s t 3-1 C h a i n 3-8 5. 5. 3 F I F O L I F O 5. 5. 6 5. 5. 6.1 [ ] q u e n e ( r e a r ) ( f r o n t 6-1a A 6-1b 6-1b D C D 6-1c a) b) c) 6-1 F I F O L I F ADT

More information

ebook39-5

ebook39-5 5 3 last-in-first-out, LIFO 3-1 L i n e a r L i s t 3-8 C h a i n 3 3. 8. 3 C + + 5.1 [ ] s t a c k t o p b o t t o m 5-1a 5-1a E D 5-1b 5-1b E E 5-1a 5-1b 5-1c E t o p D t o p D C C B B B t o p A b o

More information

Microsoft PowerPoint - Slides04_第三章(1) 栈.ppt [兼容模式]

Microsoft PowerPoint - Slides04_第三章(1) 栈.ppt [兼容模式] 第三章栈 队列 数组 栈 (Stack) 基本概念 顺序存储结构 链式存储结构 应用 队列 (Queue) 基本概念 顺序存储结构 链式存储结构 应用 特殊矩阵 (Matrix) 的压缩存储 栈 ( Stack ) 只允许在一端插入和删除的线性表 允许插入和删除的一端称为栈顶 (top), 另一端称为栈底 (bottom) 退栈 (pop) 进栈 (push) 特点后进先出 (LIFO) bottom

More information

递归函数的高效实现方法

递归函数的高效实现方法 递归函数的高效实现方法 赵建华 递归函数的适用范围和优缺点 分治法 把一个比较大的问题分解为若干个比较小的问题, 分别求解这些比较小的问题, 再综合得到原问题的解 如果比较小的问题和原问题具有同样的性质, 那么适用递归接法 要求最终能够把问题分解为能够直接解决的简单问题 优点 简洁 能够帮助思考 和问题的结构有对应关系 缺点 效率低下 递归 递归的定义 若一个对象部分地包含它自己, 或用它自己给自己定义,

More information

Microsoft PowerPoint - 4.pptx

Microsoft PowerPoint - 4.pptx 第 4 章栈和队列 运算受限的线性表 栈 表达式求值 搜索与回溯 队列 队列的应用 4.1 栈 只在称为栈顶 (top) 的一端插入和删除的线性表 另一端称为栈底 (bottom) 数据通过栈的顺序 后进先出 (LIFO) top bottom a n-1 a n-2 a 0 栈的抽象数据类型 class Stack { public: Stack ( ) { ; ~Stack ( ) { ; int

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 数据结构与算法 ( 五 ) 张铭主讲 采用教材 : 张铭, 王腾蛟, 赵海燕编写高等教育出版社,2008. 6 ( 十一五 国家级规划教材 ) http://www.jpk.pku.edu.cn/pkujpk/course/sjjg 第五章 的概念 的抽象数据类型 深度优先搜索 宽度优先搜索 的存储结构 D B A E G C H F I 二叉搜索树 堆与优先队列 Huffman 树及其应用 2 5.2

More information

正文.doc

正文.doc 第 3 章 栈 实验三 3.1 实验目的及要求 1. 理解特殊的线性结构 顺序栈的抽象数据类型的定义, 及其在 C 语言环境中的表示方法 2. 理解顺序栈的基本操作的算法, 及其在 C 语言环境中一些主要基本操作的实现 3. 在 C 语言环境下实现顺序栈的应用操作 : 1 利用栈实现十进制数转换成八进制数 2 利用栈实现一位数的加减乘除的表达式求解 3.2 实验内容 经过对实验目的及要求的分析, 本实验仍然采用首先描述栈的基本操作集函数,

More information

40 第二部分试题部分 9. 假设栈初始为空, 将中缀表达式 a/b+(c*d-e*f)/g 转换为等价的后缀表达式的过程中, 当扫描 到 f 时, 栈中的元素依次是 ( ) 2014 年全国试题 2(2) 分 A. +(*- B. +(-* C. /+(*-* D. /+-* 10. 循环队列存放

40 第二部分试题部分 9. 假设栈初始为空, 将中缀表达式 a/b+(c*d-e*f)/g 转换为等价的后缀表达式的过程中, 当扫描 到 f 时, 栈中的元素依次是 ( ) 2014 年全国试题 2(2) 分 A. +(*- B. +(-* C. /+(*-* D. /+-* 10. 循环队列存放 第 3 章栈和队列 39 第 3 章 栈和队列 一 选择题 1. 为解决计算机主机与打印机之间速度不匹配问题, 通常设置一个打印数据缓冲区, 主机将要 输出的数据依次写入该缓冲区, 而打印机则依次从该缓冲区中取出数据 该缓冲区的逻辑结 构应该是 ( ) 2009 年全国试题 1(2) 分 A. 栈 B. 队列 C. 树 D. 图 2. 设栈 S 和队列 Q 的初始状态均为空, 元素 a, b, c,

More information

Microsoft PowerPoint - Ch3 [兼容模式]

Microsoft PowerPoint - Ch3 [兼容模式] Ch.3 栈和队列 1 3.1 栈 定义和运算 栈 仅在表的一端插 删的线性表插入 进 ( 入 ) 栈 删除 出 ( 退 ) 栈 栈顶 插删的一端 栈底 另一端 结构特征 -- 后进先出 修改原则 : 退栈者总是最近入栈者 服务原则 : 后来者先服务 (LIFO 表 ) 例 : 入栈出栈 a n a 2 a 1 2 3.1 栈 Note: 后入栈者先出栈, 但不排除后者未进栈, 先入栈者先出栈 an,,

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

PowerPoint Presentation

PowerPoint Presentation 第 章 栈与队列 本章主题 : 栈和队列的应用 教学目的 : 掌握栈和队列的应用方法, 理解栈的重要作用 教学重点 : 利用栈实现行编辑, 利用栈实现表达式求值 教学难点 : 利用栈实现表达式求值 2011-10-18 1 .1 ADT 栈 ( 定义和运算 ) 1.. 栈的定义 栈 stack 是一种特殊的 ( 有序表 ) 线性表, 插入 或删除栈元素的运算只能在表的一端进行, 称运算 的一端为栈顶,

More information

Microsoft PowerPoint - DS_Ch3_EN [兼容模式]

Microsoft PowerPoint - DS_Ch3_EN [兼容模式] Data Structure Ch.3 Stacks & Queues Dr. He Emil Huang School of Computer Science and Technology Soochow University 苏州大学计算机科学与技术学院网络工程系 本章 ppt 与教材对应情况 本章涉及所有内容涵盖了 Kruse 教材以下章节 Chapter 2 ( 栈,Introduction

More information

4

4 孙猛 http://www.math.pku.edu.cn/teachers/sunm 2017 年 9 月 28 日 2 栈及其抽象数据类型 栈的实现 栈的应 用 3 基本概念 栈是 一种特殊的线性表, 它所有的插 入和删除都限制在表的同 一端进 行行 表中允许进 行行插 入 删除操作的 一端叫做栈的顶 表的另 一端则叫做栈的底 当栈中没有元素时, 称之为空栈 栈的插 入运算通常称为进栈或 入栈,

More information

新汉语水平考试

新汉语水平考试 新 汉 语 水 平 考 试 HSK( 四 级 ) H41003 注 意 一 HSK( 四 级 ) 分 三 部 分 : 1. 听 力 (45 题, 约 30 分 钟 ) 2. 阅 读 (40 题,40 分 钟 ) 3. 书 写 (15 题,25 分 钟 ) 二 听 力 结 束 后, 有 5 分 钟 填 写 答 题 卡 三 全 部 考 试 约 105 分 钟 ( 含 考 生 填 写 个 人 信 息 时

More information

PowerPoint Presentation

PowerPoint Presentation 数据结构与算法 ( 二 ) 张铭主讲 采用教材 : 张铭, 王腾蛟, 赵海燕编写高等教育出版社,2008. 6 ( 十一五 国家级规划教材 ) https://pkumooc.coursera.org/bdsalgo-001/ 第二章 线性表 第二章线性表 2.1 线性表 2.2 顺序表 2.3 链表 {a 0, a 1,, a n 1 } a 0 a 1 a 2 a n-1 tail head a

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

C 1

C 1 C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=

More information

新版 明解C++入門編

新版 明解C++入門編 511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,

More information

Microsoft PowerPoint - Lecture3.ppt

Microsoft PowerPoint - Lecture3.ppt Chap 4. Links, Stacks and Queue 1 Lists A list is a finite, ordered sequence of data items. Important concept: List elements have a position. Notation: What operations should we implement?

More information

Microsoft Word - HSK四级大纲_最新挖改3-5-10-11-14-15-33-34-35_.doc

Microsoft Word - HSK四级大纲_最新挖改3-5-10-11-14-15-33-34-35_.doc 新 汉 语 水 平 考 试 (HSK) 介 绍 为 使 汉 语 水 平 考 试 (HSK) 更 好 地 服 务 于 汉 语 学 习 者, 中 国 国 家 汉 办 组 织 中 外 汉 语 教 学 语 言 学 心 理 学 和 教 育 测 量 学 等 领 域 的 专 家, 在 充 分 调 查 了 解 海 外 汉 语 教 学 实 际 情 况 的 基 础 上, 吸 收 原 有 HSK 的 优 点, 借 鉴 近

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

新汉语水平考试

新汉语水平考试 新 汉 语 水 平 考 试 HSK( 四 级 ) H41005 注 意 一 HSK( 四 级 ) 分 三 部 分 : 1. 听 力 (45 题, 约 30 分 钟 ) 2. 阅 读 (40 题,40 分 钟 ) 3. 书 写 (15 题,25 分 钟 ) 二 听 力 结 束 后, 有 5 分 钟 填 写 答 题 卡 三 全 部 考 试 约 105 分 钟 ( 含 考 生 填 写 个 人 信 息 时

More information

新汉语水平考试

新汉语水平考试 新 漢 語 水 平 考 試 HSK( 四 級 ) H41005 注 意 一 HSK( 四 級 ) 分 三 部 分 : 1. 聽 力 (45 題, 約 30 分 鐘 ) 2. 閱 讀 (40 題,40 分 鐘 ) 3. 書 寫 (15 題,25 分 鐘 ) 二 聽 力 結 束 後, 有 5 分 鐘 填 寫 答 題 卡 三 全 部 考 試 約 105 分 鐘 ( 含 考 生 填 寫 個 人 資 訊 時

More information

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx 运算符重载 Operator Overloading class Point { public: ; double x_, y_; Why Operator Overloading? Point (double x =0, double y = 0):x_(x),y_(y) { int main(){ Point a(1., 2), b(3,4); Point c = a + b; return 0;

More information

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; Memory & Pointer trio@seu.edu.cn 2.1 2.1.1 1 int *p int a 0x00C7 0x00C7 0x00C7 2.1.2 2 int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; 2.1.3 1. 2. 3. 3 int A,

More information

PowerPoint Presentation

PowerPoint Presentation 数据结构与算法 ( 七 ) 张铭主讲 采用教材 : 张铭, 王腾蛟, 赵海燕编写高等教育出版社,2008. 6 ( 十一五 国家级规划教材 ) http://www.jpk.pku.edu.cn/pkujpk/course/sjjg 第 7 章图 7.1 图的定义和术语 7.2 图的抽象数据类型 7.3 图的存储结构 7.5 最短路径 7.6 最小生成树 2 图的遍历 (graph traversal)

More information

Microsoft PowerPoint - DS_Ch4_EN [兼容模式]

Microsoft PowerPoint - DS_Ch4_EN [兼容模式] Data Structure Ch.4 Recursion Dr. He Emil Huang School of Computer Science and Technology Soochow University 苏州大学计算机科学与技术学院网络工程系 本章 ppt 与教材对应情况 本章涉及所有内容涵盖了教材以下章节 Chapter 5 ( 递归,Recursion) Question: 递归与数据结构课程体系的关系?

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

Microsoft PowerPoint - ds-1.ppt [兼容模式]

Microsoft PowerPoint - ds-1.ppt [兼容模式] http://jwc..edu.cn/jxgl/ HomePage/Default.asp 2 说 明 总 学 时 : 72( 学 时 )= 56( 课 时 )+ 16( 实 验 ) 行 课 时 间 : 第 1 ~14 周 周 学 时 : 平 均 每 周 4 学 时 上 机 安 排 待 定 考 试 时 间 : 课 程 束 第 8 11 12 章 的 内 容 为 自 学 内 容 ; 目 录 中 标 有

More information

大侠素材铺

大侠素材铺 编译原理与技术 语法制导翻译 Ⅱ 计算机科学与技术学院 李诚 22/10/2018 Announcement Tutorial on Thursday (25/10/2018) 3B201, Class time Assignment review Q & A Cheng @ Compiler Fall 2018, USTC 2 主要内容 源程序 词法分析器 token 语法分析器 分析树 语义分析

More information

PowerPoint Presentation

PowerPoint Presentation 数据结构与算法 ( 六 ) 张铭主讲 采用教材 : 张铭, 王腾蛟, 赵海燕编写高等教育出版社,2008. 6 ( 十一五 国家级规划教材 ) http://www.jpk.pku.edu.cn/pkujpk/course/sjjg A 第 6 章树 B C 树的定义和基本术语 树的链式存储结构 子结点表 表示方法 静态 左孩子 / 右兄弟 表示法 动态表示法 动态 左孩子 / 右兄弟 表示法 父指针表示法及其在并查集中的应用

More information

Summary

Summary Summary 暑假开始准备转移博客, 试了几个都不怎么满意 ( 我还去试了下 LineBlog 不知道那时候在想 什么 ) 现在暂时转移至 WordPress, 不过还在完善中, 预计 算了不瞎预计的好 课上说最好做个代码集, 嗯嗯我也觉得挺有必要的 毕竟现在我连 Floyd 怎么写都忘了无脑 SPFA_(:з )_ 反正有用没用都稍微写一下, 暂定是目录这些, 有些还在找例题 整理代码什么的,

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

untitled

untitled 1 Outline 料 類 說 Tang, Shih-Hsuan 2006/07/26 ~ 2006/09/02 六 PM 7:00 ~ 9:30 聯 ives.net@gmail.com www.csie.ntu.edu.tw/~r93057/aspnet134 度 C# 力 度 C# Web SQL 料 DataGrid DataList 參 ASP.NET 1.0 C# 例 ASP.NET 立

More information

Microsoft PowerPoint - string_kruse [兼容模式]

Microsoft PowerPoint - string_kruse [兼容模式] Strings Strings in C not encapsulated Every C-string has type char *. Hence, a C-string references an address in memory, the first of a contiguous set of bytes that store the characters making up the string.

More information

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式]

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式] 函数 Function 如何重用代码 How to reuse code 3 4 = 3*3*3*3 3 4,6 5 : 拷贝 - 粘帖代码 (Copy-paste code) 3 4,6 5,12 10 : 拷贝 - 粘帖代码 (Copy-paste code) Bad! 使用函数 (with a function) 使用函数 (with a function) 使用函数 (with a function)

More information

Chapter12 Derived Classes

Chapter12   Derived Classes 继 承 -- 派 生 类 复 习 1. 有 下 面 类 的 说 明, 有 错 误 的 语 句 是 : class X { A) const int a; B) X(); C) X(int val) {a=2 D) ~X(); 答 案 :C 不 正 确, 应 改 成 X(int val) : a(2) { 2. 下 列 静 态 数 据 成 员 的 特 性 中, 错 误 的 是 A) 说 明 静 态 数

More information

全国计算机技术与软件专业技术资格(水平)考试

全国计算机技术与软件专业技术资格(水平)考试 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 2009 年 下 半 年 程 序 员 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 ) 请 按 下 述 要 求 正 确 填 写 答 题 纸 1. 在 答 题 纸 的 指 定 位 置 填 写 你 所 在 的 省 自 治 区 直 辖 市 计 划 单 列 市 的 名 称 2. 在 答

More information

概述

概述 OPC Version 1.6 build 0910 KOSRDK Knight OPC Server Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOS_Init...5 2.2.2 KOS_InitB...5 2.2.3

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf (%d, & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9 201 201 21 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp Compilation Error long long cin scanf Time Limit Exceeded 1: A 1 B 1 C 5 D RPG 10 E 10 F 1 G II 1 1 201 201 C 1 # include 2 int main ( void

More information

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf (%d, & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf (%d %d 2013 18 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp, Compilation Error cin scanf Time Limit Exceeded 1: A 5 B 5 C 5 D 5 E 5 F 5 1 2013 C 1 # include 2 int main ( void ) 3 { 4 int cases, a, b,

More information

Microsoft Word - 97.01.30軟體設計第二部份範例試題_C++_ _1_.doc

Microsoft Word - 97.01.30軟體設計第二部份範例試題_C++_ _1_.doc 電 腦 軟 體 設 計 乙 級 技 術 士 技 能 檢 定 術 科 測 試 範 例 試 題 (C++) 試 題 編 號 :11900-920201-4 審 定 日 期 : 94 年 7 月 1 日 修 訂 日 期 : 96 年 2 月 1 日 97 年 1 月 30 日 ( 第 二 部 份 ) 電 腦 軟 體 設 計 乙 級 技 術 士 技 能 檢 定 術 科 測 試 應 檢 參 考 資 料 壹 試

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

提问袁小兵:

提问袁小兵: C++ 面 试 试 题 汇 总 柯 贤 富 管 理 软 件 需 求 分 析 篇 1. STL 类 模 板 标 准 库 中 容 器 和 算 法 这 部 分 一 般 称 为 标 准 模 板 库 2. 为 什 么 定 义 虚 的 析 构 函 数? 避 免 内 存 问 题, 当 你 可 能 通 过 基 类 指 针 删 除 派 生 类 对 象 时 必 须 保 证 基 类 析 构 函 数 为 虚 函 数 3.

More information

Microsoft PowerPoint - 10 模板 Template.pptx

Microsoft PowerPoint - 10 模板 Template.pptx 模板 Tempalte 泛型编程的需要 Why Templates? 设想你对整数类型实现了一个排序算法 : void sort(int *is,int n); 用该函数可以对实 复数或工资单排序吗? 模板可以复用源代码 - 泛型编程. inline void Swap( int &x, int &y){ int t = x; x = y; y =t; inline void Swap(double

More information

<4D6963726F736F667420506F776572506F696E74202D203320BCC6CBE3D1A7BFC6D6D0B5C4B5E4D0CDCECACCE2C7F3BDE22E707074205BBCE6C8DDC4A3CABD5D>

<4D6963726F736F667420506F776572506F696E74202D203320BCC6CBE3D1A7BFC6D6D0B5C4B5E4D0CDCECACCE2C7F3BDE22E707074205BBCE6C8DDC4A3CABD5D> 计 算 机 科 学 中 的 问 题 求 解 初 探 计 算 学 科 中 的 典 型 问 题 求 解 李 瑞 轩 教 授 华 中 科 技 大 学 智 能 与 分 布 计 算 实 验 室 rxli@hust.edu.cn http://idc.hust.edu.cn/~rxli/ 主 要 内 容 哥 尼 斯 堡 七 桥 问 题 梵 天 塔 问 题 P 类 问 题 与 NP 类 问 题 哲 学 家 共 餐

More information

C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 30 日 1

C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 30 日 1 C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 月 30 日 1 1 STRINGSORT 1 StringSort 题目描述 编写程序, 利用 string 类完成一个字符串中字符的排序 ( 降序 ) 并输出 输入描述 输入仅一行, 是一个仅由大小写字母和数字组成的字符串 输出描述 输出排序后的字符串 样例输入 abcde 样例输出 edcba 提示 使用 std::sort

More information

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074> 程 序 设 计 实 习 INFO130048 3-2.C++ 面 向 对 象 程 序 设 计 重 载 继 承 多 态 和 聚 合 复 旦 大 学 计 算 机 科 学 与 工 程 系 彭 鑫 pengxin@fudan.edu.cn 内 容 摘 要 方 法 重 载 类 的 继 承 对 象 引 用 和 拷 贝 构 造 函 数 虚 函 数 和 多 态 性 类 的 聚 集 复 旦 大 学 计 算 机 科 学

More information

Strings

Strings Inheritance Cheng-Chin Chiang Relationships among Classes A 類 別 使 用 B 類 別 學 生 使 用 手 機 傳 遞 訊 息 公 司 使 用 金 庫 儲 存 重 要 文 件 人 類 使 用 交 通 工 具 旅 行 A 類 別 中 有 B 類 別 汽 車 有 輪 子 三 角 形 有 三 個 頂 點 電 腦 內 有 中 央 處 理 單 元 A

More information

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1 21 , 7, Windows,,,, : 010-62782989 13501256678 13801310933,,,, ;,, ( CIP) /,,. : ;, 2005. 11 ( 21 ) ISBN 7-81082 - 634-4... - : -. TP316-44 CIP ( 2005) 123583 : : : : 100084 : 010-62776969 : 100044 : 010-51686414

More information

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式] Arrays and Strings 存储同类型的多个元素 Store multi elements of the same type 数组 (array) 存储固定数目的同类型元素 如整型数组存储的是一组整数, 字符数组存储的是一组字符 数组的大小称为数组的尺度 (dimension). 定义格式 : type arrayname[dimension]; 如声明 4 个元素的整型数组 :intarr[4];

More information

<4D F736F F D B8BDBCFE4220D7A8D2B5BBF9B4A1D3EBBACBD0C4BFCEB3CCC3E8CAF62E646F6378>

<4D F736F F D B8BDBCFE4220D7A8D2B5BBF9B4A1D3EBBACBD0C4BFCEB3CCC3E8CAF62E646F6378> B212CC: 数据结构与算法 课程描述 0 课程基本信息 课程编号 : B212CC 课程名称 : 数据结构与算法英文名称 : Data Structures and Algorithms 英文简称 : DSA 预备课程 : 计算系统基础 离散数学授课时间 : 二年级第一学期时间分配 : 课堂教学 (48 课时 )+ 实验安排 (48 课时 )+ 课后作业与阅读 (48 课时 ) 学分数 : 3

More information

untitled

untitled 3 C++ 3.1 3.2 3.3 3.4 new delete 3.5 this 3.6 3.7 3.1 3.1 class struct union struct union C class C++ C++ 3.1 3.1 #include struct STRING { typedef char *CHARPTR; // CHARPTR s; // int strlen(

More information

全国计算机技术与软件专业技术资格(水平)考试

全国计算机技术与软件专业技术资格(水平)考试 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 2008 年 上 半 年 程 序 员 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 ) 试 题 一 ( 共 15 分 ) 阅 读 以 下 说 明 和 流 程 图, 填 补 流 程 图 中 的 空 缺 (1)~(9), 将 解 答 填 入 答 题 纸 的 对 应 栏 内 [ 说 明

More information

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F 1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET 2.0 2.0.NET Framework.NET Framework 2.0 ( 3).NET Framework 2.0.NET Framework ( System ) o o o o o o Boxing UnBoxing() o

More information

立 志 于 打 造 最 贴 近 考 生 实 际 的 辅 导 书 计 算 机 考 研 之 数 据 结 构 高 分 笔 记 率 辉 编 著 周 伟 张 浩 审 核 讨 论 群 :15945769

立 志 于 打 造 最 贴 近 考 生 实 际 的 辅 导 书 计 算 机 考 研 之 数 据 结 构 高 分 笔 记 率 辉 编 著 周 伟 张 浩 审 核 讨 论 群 :15945769 立 志 于 打 造 最 贴 近 考 生 实 际 的 辅 导 书 计 算 机 考 研 之 数 据 结 构 高 分 笔 记 率 辉 编 著 周 伟 张 浩 审 核 讨 论 群 :15945769 前 言 在 计 算 机 统 考 的 四 门 专 业 课 中, 最 难 拿 高 分 的 就 是 数 据 结 构 但 是 这 门 课 本 身 的 难 度 并 不 是 考 生 最 大 的 障 碍, 真 正 的 障 碍

More information

《C语言程序设计》第2版教材习题参考答案

《C语言程序设计》第2版教材习题参考答案 教材 C 语言程序设计 ( 第 2 版 ) 清华大学出版社, 黄保和, 江弋编著 2011 年 10 月第二版 ISBN:978-7-302-26972-4 售价 :35 元 答案版本 本习题答案为 2012 年 2 月修订版本 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p = &a A. *p = *a B. p = *a C.p = &a D. *p =

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN:978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p=&a 2. 设已定义 int x,*p=&x;, 则下列表达式中错误的是 :B)&*x 3. 若已定义 int a=1,*b=&a;,

More information

生成word文档

生成word文档 希赛网, 专注于软考 PMP 通信考试的专业 IT 知识库和在线教育平台 希赛网在线题库, 提供历年考试真题 模拟试题 章节练习 知识点练习 错题本练习等在线做题服务, 更有能力评估报告, 让你告别盲目做题, 针对性地攻破自己的薄弱点, 更高效的备考 希赛网官网 :http://www.educity.cn/ 希赛网软件水平考试网 :http://www.educity.cn/rk/ 希赛网在线题库

More information

_汪_文前新ok[3.1].doc

_汪_文前新ok[3.1].doc 普 通 高 校 本 科 计 算 机 专 业 特 色 教 材 精 选 四 川 大 学 计 算 机 学 院 国 家 示 范 性 软 件 学 院 精 品 课 程 基 金 青 年 基 金 资 助 项 目 C 语 言 程 序 设 计 (C99 版 ) 陈 良 银 游 洪 跃 李 旭 伟 主 编 李 志 蜀 唐 宁 九 李 涛 主 审 清 华 大 学 出 版 社 北 京 i 内 容 简 介 本 教 材 面 向

More information

新・明解C言語入門編『索引』

新・明解C言語入門編『索引』 !... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177

More information

C/C++语言 - C/C++数据

C/C++语言 - C/C++数据 C/C++ C/C++ Table of contents 1. 2. 3. 4. char 5. 1 C = 5 (F 32). 9 F C 2 1 // fal2cel. c: Convert Fah temperature to Cel temperature 2 # include < stdio.h> 3 int main ( void ) 4 { 5 float fah, cel ;

More information

untitled

untitled 1 行 行 行 行.NET 行 行 類 來 行 行 Thread 類 行 System.Threading 來 類 Thread 類 (1) public Thread(ThreadStart start ); Name 行 IsAlive 行 行狀 Start 行 行 Suspend 行 Resume 行 行 Thread 類 (2) Sleep 行 CurrentThread 行 ThreadStart

More information

PowerPoint Presentation

PowerPoint Presentation 数 据 结 构 与 算 法 ( 六 ) 张 铭 主 讲 采 用 教 材 : 张 铭, 王 腾 蛟, 赵 海 燕 编 写 高 等 教 育 出 版 社,2008. 6 ( 十 一 五 国 家 级 规 划 教 材 ) http://www.jpk.pku.edu.cn/pkujpk/course/sjjg A 第 6 章 树 B 树 的 定 义 和 基 本 术 语 树 的 链 式 存 储 结 构 J H

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

untitled

untitled 1 7 7.1 7.2 7.3 7.4 7.5 2 7.1 VFT virtual 7.1 3 1 1. 2. public protected public 3. VFT 4. this const volatile 4 2 5. ( ) ( ) 7.1 6. no-static virtual 7.2 7. inline 7.3 5 3 8. this this 9. ( ) ( ) delete

More information

untitled

untitled 1 1.1 1.2 1.3 1.4 1.5 ++ 1.6 ++ 2 BNF 3 4 5 6 7 8 1.2 9 1.2 IF ELSE 10 1.2 11 1.2 12 1.3 Ada, Modula-2 Simula Smalltalk-80 C++, Objected Pascal(Delphi), Java, C#, VB.NET C++: C OOPL Java: C++ OOPL C# C++

More information

Microsoft PowerPoint - ds-9.ppt [兼容模式]

Microsoft PowerPoint - ds-9.ppt [兼容模式] 第 九 章 静 态 表 动 态 表 哈 希 表 9.1 基 本 概 念 (Page 214) 2 表 : 是 由 同 一 类 型 元 素 成 的 集 合 静 态 表 : 只 做 询 或 检 索 操 作 动 态 表 : 询 检 索 插 入 删 除 关 键 字 : 是 元 素 中 某 个 相 的 值, 用 它 可 以 标 识 一 个 元 素 主 关 键 字 次 关 键 字 : 根 给 定 值, 在 表

More information

untitled

untitled A, 3+A printf( ABCDEF ) 3+ printf( ABCDEF ) 2.1 C++ main main main) * ( ) ( ) [ ].* ->* ()[] [][] ** *& char (f)(int); ( ) (f) (f) f (int) f int char f char f(int) (f) char (*f)(int); (*f) (int) (

More information

Untitled

Untitled 340_1 340_2 340_3 1 340_4 340_5 2 340_6 340_7 3 340_8 340_9 bc 340_10 4 340_11 5 340_12 340_13 340_14 6 340_15 340_16 340_17 7 340_18 340_19 8 340_20 340_21 340_22 9 uu 340_23 340_24 10 11 340_25 12 13,

More information

4-2 1. 使 用 一 般 佇 列 存 放 資 料 時, 當 前 端 (Front) 尚 有 空 位 時, 再 加 入 元 素, 卻 發 現 此 佇 列 已 滿, 請 問 此 時 使 用 下 列 那 一 個 方 法 較 佳? (A) 優 先 佇 列 (B) 環 形 佇 列 (C) 雙 向 佇 列

4-2 1. 使 用 一 般 佇 列 存 放 資 料 時, 當 前 端 (Front) 尚 有 空 位 時, 再 加 入 元 素, 卻 發 現 此 佇 列 已 滿, 請 問 此 時 使 用 下 列 那 一 個 方 法 較 佳? (A) 優 先 佇 列 (B) 環 形 佇 列 (C) 雙 向 佇 列 CHAPTER 4 隨 書 光 碟 4-1 4-3 環 形 佇 列 由 於 佇 列 有 一 個 問 題, 就 是 前 端 (Front) 尚 有 空 位 時, 再 加 入 元 素, 卻 發 現 此 佇 列 已 滿 此 時 的 解 決 方 法 就 是 使 用 環 形 佇 列 (Circular Queue) 定 義 是 指 一 種 環 形 結 構 的 佇 列 作 法 將 一 維 陣 列 的 第 0 個

More information

内 容 提 要 指 针 持 久 动 态 内 存 分 配 字 符 串 ( 字 符 数 组 ) 2

内 容 提 要 指 针 持 久 动 态 内 存 分 配 字 符 串 ( 字 符 数 组 ) 2 第 六 讲 指 针 与 字 符 串 1 内 容 提 要 指 针 持 久 动 态 内 存 分 配 字 符 串 ( 字 符 数 组 ) 2 指 针 什 么 是 指 针 指 针 的 定 义 与 运 算 指 针 与 一 维 数 组 指 针 数 组 行 指 针 与 二 维 数 组 指 针 与 引 用 指 针 与 函 数 3 指 针 定 义 什 么 是 指 针 指 针 变 量, 简 称 指 针, 用 来 存 放

More information

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 第十一讲 运算符重载 与类型转换 运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 为什么要运算符重载 预定义的运算符只针对基本数据类型, 若要对类的对象进行类似的运算, 需要重新定义运算符的功能 运算符重载实质就是函数重载 : 对已有的运算符赋予多重含义, 使得同一个运算符作用于不同类型的数据时导致不同的行为

More information

c_cpp

c_cpp C C++ C C++ C++ (object oriented) C C++.cpp C C++ C C++ : for (int i=0;i

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 数据结构与算法 ( 五 ) 张铭主讲 采用教材 : 张铭, 王腾蛟, 赵海燕编写高等教育出版社,2008. 6 ( 十一五 国家级规划教材 ) http://www.jpk.pku.edu.cn/pkujpk/course/sjjg A 的概念 第五章 B C 的抽象数据类型 深度优先搜索 宽度优先搜索 的存储结构 D E G H F I 二叉搜索树 堆与优先队列 Huffman 树及其应用 2 5.1

More information

试卷代号 : 座位号 I II 中央广播电视大学 学年度第二学期 " 开放本科 " 期末考试 数据结构试题 2011 年 7 月! 题号 I - I 二 三 四! 五! 六 总分 分数 I I I 1 1- I ---1 I 得分 评卷人 一 单项选择

试卷代号 : 座位号 I II 中央广播电视大学 学年度第二学期  开放本科  期末考试 数据结构试题 2011 年 7 月! 题号 I - I 二 三 四! 五! 六 总分 分数 I I I 1 1- I ---1 I 得分 评卷人 一 单项选择 试卷代号 : 1 0 1 0 座位号 I II 中央广播电视大学 2 0 1 0-2 0 1 1 学年度第二学期 " 开放本科 " 期末考试 数据结构试题 2011 年 7 月! 题号 I - I 二 三 四! 五! 六 总分 分数 I I I 1 1- I ---1 I 得分 评卷人 一 单项选择题 ( 在括号内填写所选择的标号 每小题 2 分, 共 1 8 分 ) 1. 一种抽象数据类型包括数据和

More information

Microsoft Word - ch04三校.doc

Microsoft Word - ch04三校.doc 4-1 4-1-1 (Object) (State) (Behavior) ( ) ( ) ( method) ( properties) ( functions) 4-2 4-1-2 (Message) ( ) ( ) ( ) A B A ( ) ( ) ( YourCar) ( changegear) ( lowergear) 4-1-3 (Class) (Blueprint) 4-3 changegear

More information

1

1 基本練習題 1 答 :(A) 2 答 :(B) 3 答 :(C) 4 答 :(B) 5 答 :(D) 6 答 :2 7 答 :(B) 8 答 : (A) A B C / D E * + F G / - (B) A B + C D - * E / (C) A B C * + E F + - 9 答 : (A) - + A * - / BCDE / F G (B) / * + A B C D E (C)

More information

试卷代号 : 座位号 中央广播电视大学 学年度第一学期 " 开放本科 " 期末考试 数据结构试题 2011 年 1 月 题号一四五总分一一 分数 得分 评卷人 一 单项选择题, 在括号内填写所选择的标号 ( 每小题 2 分, 共 1 8 分 ) 1. 执行下

试卷代号 : 座位号 中央广播电视大学 学年度第一学期  开放本科  期末考试 数据结构试题 2011 年 1 月 题号一四五总分一一 分数 得分 评卷人 一 单项选择题, 在括号内填写所选择的标号 ( 每小题 2 分, 共 1 8 分 ) 1. 执行下 试卷代号 : 1 0 1 0 座位号 中央广播电视大学 2 0 1 0 2011 学年度第一学期 " 开放本科 " 期末考试 数据结构试题 2011 年 1 月 题号一四五总分一一 分数 一 单项选择题, 在括号内填写所选择的标号 ( 每小题 2 分, 共 1 8 分 ) 1. 执行下面程序段时, s 语句的执行次数为 ( ) forcint i= 1; i

More information

<4D6963726F736F667420576F7264202D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

<4D6963726F736F667420576F7264202D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF> 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 考 试 2009 年 上 半 年 软 件 设 计 师 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 请 按 下 述 要 求 正 确 填 写 答 题 纸 1. 在 答 题 纸 的 指 定 位 置 填 写 你 所 在 的 省 自 治 区 直 辖 市 计 划 单 列 市 的 名 称 2. 在 答

More information

第1章

第1章 21 世纪高职高专规划教材 计算机系列 数据结构概论 尹绍宏董卿霞苑春苗 编著 清华大学出版社 北京交通大学出版社 北京 内容简介 本书详细地介绍了各种类型的数据结构, 以及查找和排序的方法 对每一种数据结构, 主要讲述其基本概念, 各种存储结构, 以及不同存储结构下的各种操作的实现, 并用 C 语言对其算法进行实现 对查找和排序的各种不同方法除讲述其方法外, 还给出了用 C 语言实现的算法程序,

More information

30695.nps

30695.nps 第 3 章 栈和队列 栈和队列是两种特殊的线性结构 从数据结构的角度看它们是线性表, 从操作的角度看它们是操作受限的线性表 在日常生活中经常会遇到栈或队列的实例 例如, 铁路调度中用到栈, 民航机票订购中用到队列 栈和队列还广泛应用于各种软件系统之中 例如, 在编译和运行计算机语言程序的过程中, 就需要利用栈进行语法检查 计算表达式的值 函数的调用和实现递归等 ; 在计算机操作系统的作业管理中就要使用队列

More information

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit 6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C51 6.1 C51 6.1.1 C51 C51 ANSI C MCS-51 C51 ANSI C C51 6.1 6.1 C51 bit Byte bit sbit 1 0 1 unsigned char 8 1 0 255 Signed char 8 11 128

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac)

OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac) OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac) 复习 面向对象编程 将实际问题分解成不同的对象 不的对象提供不同的服务 对象之间可以传递消息 例子小李深夜

More information

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式] 指针 Pointers 变量指针与指针变量 Pointer of a variable 变量与内存 (Variables and Memory) 当你声明一个变量时, 计算机将给该变量一个内存, 可以存储变量的值 当你使用变量时, 计算机将做两步操作 : - 根据变量名查找其对应的地址 ; - 通过地址对该地址的变量内容进行读 (retrieve) 或写 (set) 变量的地址称为变量的指针! C++

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

生成word文档

生成word文档 希赛网, 专注于软考 PMP 通信考试的专业 IT 知识库和在线教育平台 希赛网在线题库, 提供历年考试真题 模拟试题 章节练习 知识点练习 错题本练习等在线做题服务, 更有能力评估报告, 让你告别盲目做题, 针对性地攻破自己的薄弱点, 更高效的备考 希赛网官网 :http://www.educity.cn/ 希赛网软件水平考试网 :http://www.educity.cn/rk/ 希赛网在线题库

More information

第一章三角函数 1.3 三角函数的诱导公式 A 组 ( ) 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角, 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C 2 ( 中诱导公式 ) ( ) B. cos(

第一章三角函数 1.3 三角函数的诱导公式 A 组 ( ) 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角, 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C 2 ( 中诱导公式 ) ( ) B. cos( 第一章三角函数 1. 三角函数的诱导公式 A 组 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C ( 中诱导公式 ) B. cos( B C) cos A D. sin( B C) sin A sin60 cos( ) sin( 0 )cos( 70 ) 的值等于

More information