Microsoft PowerPoint - Slides03_第二章 线性表.ppt [兼容模式]

Size: px
Start display at page:

Download "Microsoft PowerPoint - Slides03_第二章 线性表.ppt [兼容模式]"

Transcription

1 第二章线性表 定义 基本操作 实现 顺序存储 链式存储 应用 多项式

2 线性表 (Linear List) 定义 线性表是 n ( 0) 个数据元素的有限序列, 记作 (a 1, a 2,, a n ) a i 是表中数据元素,n 是表长度 假定 : 各元素的数据类型相同 原则上 : 线性表中, 表元素的数据类型可以不相同 采用的存储表示可能会对元素的数据类型有限制

3 特点 除第一个元素外, 其他每一个元素有一个且仅有一个直接前驱 (predecessor) 除最后一个元素外, 其他每一个元素有一个且仅有一个直接后继 (successor) a 1 a 2 a 3 a 4 a 5 a 6 直接前驱和直接后继 描述了结点之间的逻辑关系 ( 即邻接关系 )

4 第二章线性表 定义 类定义和基本操作 实现 顺序存储 链式存储 应用 多项式

5 线性表的抽象基类 (Abstract Base Class)

6 线性表的抽象数据类型 ADT LinearList is Object:n(>=0) 个原子表项的一个有限序列 每个表项的数据类型为 T Function: create() // 创建一个空线性表 bool getdata(int i, T& x) // 取值 void setdata(int i, T& x) // 赋值 void CopyList(List<T>& L)// 将表 L 复制到当前表中 int Length() // 计算表长度 int Search(T& x) // 搜索 : 寻找并返回 x 在表中的位置 int Locate(int i) // 定位 : 返回第 i 个表项在表中的位置 bool Insert(int i, Ex) // 插入 : 在第 i 个表项后插入 x, 返回成功标志 bool Remove(int i, E& x) // 删除第 i 个表项, 通过 x 返回该表项的的值 bool IsEmpty() // 判表空 : 满返回 true, 否则返回 false bool IsFull() // 判表满 : 满返回 true,, 否则返回 false void Sort() // 排序 End LinearList

7 线性表的抽象基类 template <class T,classE> class LinearList { public: LinearList(); ~LinearList(); // 构造函数 // 析构函数 virtual E* getdata(int i) const = 0; virtual void setdata(int i, Ex)=0; virtual void input() = 0; virtual void output() = 0; // 取值 // 赋值 // 输入 // 输出 virtual LinearList<T, E>operator= (LinearList<T, E>& L) =0; // 复制 -- 赋值运算符重载

8 virtual int Size() const = 0; virtual int Length() const = 0; // 求表最大体积 // 求表长度 }; virtual int Search(Tx) const = 0; virtual int Locate(int i) const = 0; virtual bool Insert(int i, Ex)=0; virtual bool Remove(int i, E& x) =0; virtual bool IsEmpty() const = 0; virtual bool IsFull() const = 0; virtual void Sort() = 0; // 搜索 // 定位 // 插入 // 删除 // 判表空 // 判表满 // 排序

9 第二章线性表 定义 基本操作 实现 顺序存储 链式存储 应用 多项式

10 线性表的存储表示方式 1 顺序表 (Sequential List) 存储 2 链表 (Linked List) 存储

11 顺序表 (Sequential List)

12 顺序表 (Sequential List) data 定义 将线性表中的元素相继存放在一个连续的存储空间中 存储结构的具体实现 : 利用一维数组 (Array) 描述存储结构 特点 所有元素的逻辑先后顺序与其物理存放顺序一致

13 作为顺序表存储结构的数组有 2 种分配形式 : 静态和动态 #define maxsize 100 typedef int T; typedef struct { T data[maxsize]; int n; } SeqList; typedef int T; typedef struct { T*data; int maxsize, n; } SeqList; // 顺序表的静态存储表示 // 顺序表的动态存储表示

14 结点的变体 ( 异质数据 ) 25 s t 若想在线性表中存放不同类型的数据, 可采用等价定义 union: typedef union { int val; // 按 data.val 引用 char ch; // 按 data.ch 引用 float dir; // 按 data.dir 引用 union data *link; // 按 data.link 引用 } data; // 整体上是同一类型 data

15 顺序表的类定义 (Sequential List class)

16 顺序表 SeqList 类的定义 #include <iostream.h> #include <stdlib.h> #include "LinearList.h" const int defaultsize = 100; // 定义在 seqlist.h 中 template <class T, class E> class SeqList: public LinearList<T, E> { protected: E *data; // 存放数组 int maxsize; // 最大可容纳表项的项数 int n; // 当前已存表项数 void resize(int newsize); // 改变数组空间大小

17 public: SeqList(int sz = defaultsize); // 构造函数 SeqList(SeqList<T,E>& L); // 复制构造函数 ~SeqList() {delete[ ] data;} // 析构函数 int Size() const {return maxsize;} // 求表最大容量 int Length() const {return n;} // 计算表长度 int Search(Tx) const; // 搜索 x 在表中位置, 函数返回表项序号 int Locate(int i) const; // 定位第 i 个表项, 函数返回表项序号 bool Insert(int i, E x); // 插入 bool Remove(int i, E& x); // 删除 };

18 顺序表的构造函数 #include <stdlib.h> // 操作 exit 存放在此 #include seqlist.h // 操作实现放在 seqlist.cpp template <class T, class E> SeqList<T, E>::SeqList(int sz) { if (sz > 0) { maxsize = sz; n = 0; data = new E[maxSize]; // 创建表存储数组 if (data == NULL) // 动态分配失败 { cerr << " 存储分配错误!" << endl; exit(1); } } };

19 复制构造函数 / 拷贝构造函数 template <class T, class E> SeqList<T, E>::SeqList ( SeqList<T, E>& L ) { maxsize = L.Size(); n = L.Length(); data = new E[maxSize]; // 创建存储数组 if (data == NULL) // 动态分配失败 {cerr << " 存储分配错误!" << endl; exit(1);} for (int i = 1; i <= n; i++) // 传送各个表项 data[i-1] = L.getData(i); };

20 搜索 / 查找 (Search)

21 顺序搜索图示 data 搜索 i i i i 搜索成功

22 data 搜索 50 i i i i i 搜索失败

23 顺序表的搜索算法 template <class T, class E> int SeqList<T, E>::search(T& x) const { // 在表中顺序搜索与给定值 x 匹配的表项, 找到则 // 函数返回该表项是第几个元素, 否则函数返回 0 for (int i = 1; i <= n; i++) // 顺序搜索 if ( data[i-1] == x ) return i; // 表项序号和表项位置差 1 return 0; // 搜索失败 };

24 搜索算法的性能分析 搜索成功, 平均比较次数 ACN (Average Comparing Number) ACN= n pi i 1 c i pi : 搜索第 i 项的概率 ci : 找到时的比较次数 若搜索概率相等, 则 ACN ACN = 1 n 1 n n i 1 i (1 1 (1 n n) n n 2 n) 搜索不成功数据比较 n 次

25 插入 (Insert)

26 表项的插入 data i 插入 x data

27 表项的插入算法 template <class T, class E> bool SeqList<T, E>::Insert (int i, Ex) { // 将新元素 x 插入到表中第 i (1 i n+1) 个表项位 // 置 函数返回插入成功的信息 if (n == maxsize) return false; // 表满 }; if (i < 1 i > n+1) return false; // 参数 i 不合理 for (int j = n; j >= i; j--) // 依次后移 data[j] = data[j-1]; data[i-1] = x; // 插入 ( 第 i 表项在 data[i-1] 处 ) n++; return true; // 插入成功

28 在表中第 i 个位置插入 插入算法的性能分析 从 data[i-1] 到 data [n-1] 成块后移 移动 n-1-(i-1)+1 = n-i+1 项 考虑所有插入位置, 相等插入概率时, 从 1 到 n+1 平均移动次数 AMN (Average Moving Number) AMN = 1 n 1 n 1 i 1 ( n 1 n( n ( n 1) 2 i 1) 1) n 2 n 1 ( n 1 1 0)

29 删除 (Remove)

30 表项的删除 data 删除 x data

31 表项的删除算法 template <class T, class E> bool SeqList<T, E>::Remove (int i, E& x) { // 从表中删除第 i(1 i n) 个表项 // 通过引用型参 // 数 x 返回被删元素 // 函数返回删除成功信息 if (n == 0) return false; // 表空 if (i < 1 i > n) return false; // 参数 i 不合理 }; x = data[i-1]; for (int j = i; j <= n-1; j++) // 依次前移, 填补 data[j-1] = data[j]; n--; return true;

32 删除算法的性能分析 删除第 i 个表项, 需将第 i+1 项到第 n 项全部前移, 需前移的项数为 : n-(i+1)+1 = n-i 考虑表中所有可能删除位置 (1 i n-1), 相等删除概率时, 平均移动次数 AMN: AMN = n 1 1 ( n 1) n n ( n i ) n 1 n 2 2 i 1

33 应用 集合运算

34 集合的 并 运算 void Union ( SeqList<int, int>& LA, SeqList<int, int>& LB ) { int n1 = LA.Length ( ); int n2 = LB.Length ( ); int i, k, x; for ( i = 0; i < n2; i++ ) } { } x = LB.getData(i); // 在 LB 中取一元素 k = LA.Search(x); // 在 LA 中搜索它 if (k == 0) // 若在 LA 中未找到插入它 { LA.Insert(n1, x); n1++; }// 插入到第 n1 个表项位置

35 集合的 交 运算 void Intersection (SeqList<int, int> & LA, SeqList<int, int> & LB) { int n1 = LA.Length ( ); int x, k, i = 0; while ( i < n1 ) { x = LA.getData(i); // 在 LA 中取一元素 k = LB.Search(x); // 在 LB 中搜索它 if (k == 0) // 若在 LB 中未找到 { LA.Remove(i, x); n1--; } // 在 LA 中删除它 else i++; // 找到, 继续处理 LA 中的下一个元素 } }

36 单链表 (Singly Linked List)

37 特点 每个元素 ( 表项 ) 由结点 (Node) 构成 data link 线性结构 单链表 (Singly Linked List) first a 1 a 2 a 3 a 4 a 5 Λ 结点之间 : 可以连续 / 可以不连续存储 结点的逻辑顺序与物理顺序可以不一致 表可扩充

38 单链表的存储映像 free (a) 可利用存储空间 a 0 a 2 a 1 a 3 first free (b) 经过一段运行后的单链表结构

39 单链表的类定义 使用面向对象方法, 要把数据与操作一起定义和封装, 用多个类表达一个单链表 链表结点 (ListNode) 类 链表 (List) 类 4 种定义的方式 结构 (Sturct) 复合 (composition) 继承 (Inheritance) 嵌套

40 单链表的结构 (struct) 定义 在 C 语言中, 定义单链表的结构十分简单 : typedef int T; // 结点数据的类型 // 结点结构定义 typedef struct node { T data; // 结点数据域 node *link; // 结点链接指针域 }; 是一个递归 (Recursion) 的定义 结构定义时, 不考虑操作, 链表定义与实现时, 其操作直接访问结构变量的结构分量

41 结构方式 struct ListNode { int data; ListNode * link; }; // 链表结点 // 链表类, 直接使用链表结点类的数据和操作 class List { private: ListNode *first; // 表头指针 }; // 链表中的结点属于链表私有, 别人无法访问

42 复合类方式 class List; // 类的声明 class ListNode { // 链表结点类定义 friend class List; // 链表类为友元类的声明 private: int data; // 结点数据, 整型 ListNode * link; // 结点指针 }; class List { // 链表类定义 private: ListNode *first ; // 表头指针 };

43 复合方式 链表结点类中声明链表类是它的友元类 即 : 它的私有成员与链表类所共享 特点 : 灵活

44 继承方式 // 链表结点类定义 class ListNode { protected: int data; ListNode * link; }; // 链表类定义, 继承链表结点类的数据和操作 class List : public class ListNode { private: ListNode *first; // 表头指针 };

45 继承方式 链表类声明为链表结点类的派生类 在实现上是可行的, 在逻辑上是有问题的 如 三角形 is 多边形 ( 继承关系 ) 链表 is 链表结点 ( 显然概念不准确 )

46 嵌套方式 class List { private: class ListNode { public: int data; ListNode *link; }; ListNode *first; public: // 链表操作 }; // 链表类定义 // 嵌套链表结点类定义 // 表头指针

47 嵌套方式 链表结点类是链表类的私有成员 限制了链表结点类的应用范围

48 插入 (Insert )

49 单链表中的插入操作 插入 第一种情况 : 在链表最前端插入 newnode->link = first ; first = newnode; newnode first newnode first ( 插入前 ) ( 插入后 )

50 第二种情况 : 在链表中间插入 newnode->link = current->link; current->link = newnode; newnode current newnode current ( 插入前 ) ( 插入后 )

51 第三种情况 : 在链表末尾插入 newnode->link = current->link; current->link = newnode; current newnode newnode current ( 插入前 ) ( 插入后 )

52 单链表的插入算法描述及实现 bool List::Insert(int i, int x) { // 将新元素 x 插入到第 i 个结点之后 i 从 1 开始, //i = 0 表示插入到首元结点之前 if (first == NULL i == 0) { // 空表或首元结点前 LinkNode *newnode = new LinkNode(x); // 建立一个新结点 newnode->link = first; first = newnode; // 新结点成为首元结点 } else { // 否则, 寻找插入位置 LinkNode *current = first; int k = 1;

53 }; while (k < i && current!= NULL) // 找第 i 结点 { current = current->link; k++; } if (current == NULL && first!= NULL) // 链短 {cerr << 无效的插入位置!\n ; return false;} else { // 插入在链表的中间 LinkNode *newnode = new LinkNode(x); newnode->link = current->link; current->link = newnode; } } return true;

54 删除 (Remove)

55 删除 第一种情况 : 删除表中第一个元素 第二种情况 : 删除表中或表尾元素 a i-1 a i a i+1 删除前 a i-1 a i a i+1 p q 删除后 在单链表中删除含 a i 的结点

56 单链表的删除算法 bool List::Remove (int i, int& x) { // 将链表中的第 i 个元素删去, i 从 1 开始 LinkNode *del; // 暂存删除结点指针 if (i <= 1) { del = first; first = first->link; } else { LinkNode *current = first; k = 1; // 找 i-1 号结点 while (k < i-1 && current!= NULL) { current = current->link; k++; } if (current == NULL current->link == NULL) { cout << 无效的删除位置!\n ; return false; }

57 }; del = current->link; // 删中间 / 尾结点 current->link = del->link; } x = del->data; delete del; // 取出被删结点数据 return true;

58 实现单链表的插入和删除算法 不需要移动元素, 只需修改结点指针, 比顺序表方便 情况复杂 专门讨论空表和在表头插入的特殊情形 寻找插入或删除位置 只能沿着链顺序检测

59 带表头结点的单链表 (Single Linked List with first pointer)

60 表头结点 带表头结点的单链表 位于表的最前端, 仅标志表头 本身不带数据, 设置表头结点的目的 统一空表与非空表的操作, 简化链表操作的实现 a 1 a n-1 first 0 first 0 非空表 空表

61 在带表头结点的单链表最前端插入新结点 first p newnode 插入 first p newnode first p newnode 0 first 插入 p newnode 0 newnode->link = p->link; p->link = newnode;

62 从带表头结点的单链表中删除最前端的结点 first ( 非空表 ) first first first p p 0 q q 0 ( 空表 ) q = p->link; p->link = q->link; delete q;

63 单链表的模板类 类模板 使得类的数据成员和成员函数的设计更完整 更灵活 更易于重用 / 复用 在单链表的类模板定义中, 增加了表头结点

64 用模板定义的单链表类 template <class T, class E> // 定义在 LinkedList.h struct LinkNode { // 链表结点类的定义 E data; // 数据域 LinkNode<T, E> *link; // 链指针域 LinkNode() { link = NULL; } // 构造函数 LinkNode(E item, LinkNode<T, E> *ptr = NULL) { data = item; link = ptr; } // 构造函数 bool operator== (T x) { return data == x; } // 重载函数, 判相等 bool operator!= (T x) { return data!= x; } };

65 template <class T, class E> class List : public LinearList<T, E> { // 单链表类定义, 不用继承也可实现 protected: LinkNode<T, E> *first; // 表头指针 public: List() { first = new LinkNode<T, E>; } // 构造函数 List(E x) { first = new LinkNode<T, E>; first->link = new LinkNode<T, E>(x);} List( List<T, E>& L); // 复制构造函数 ~List(){ } // 析构函数 void makeempty(); // 将链表置为空表 int Length() const; // 计算链表的长度

66 LinkNode<T, E> *Search(T x); // 搜索含 x 元素 LinkNode<T, E> *Locate(int i); // 定位第 i 个元素 E *getdata(int i); // 取出第 i 个元素值 void setdata(int i, E x); // 更新第 i 个元素值 bool Insert (int i, E x); // 在第 i 个元素后插入 bool Remove(int i, E& x); // 删除第 i 个元素 bool IsEmpty() const // 判表空否 { return first->link == NULL? true : false; } LinkNode<T, E> *getfirst() const { return first; } void setfirst(linknode<t, E> *f ) { first = f; } void Sort(); // 排序 };

67 前插创建 (inputfront)

68 前插法建立单链表 从一个空表开始, 重复读入数据 : 生成新结点 将读入数据存放到新结点的数据域中 将该新结点插入到链表的前端 直到读入结束符为止 first 0 first newnode 0 newnode

69 template <class T, class E> void inputfront (T endtag, List<T, E>& L) { LinkNode<T, E> *newnode, *newf; E val; newf = new LinkNode<T, E>; L.setFirst (newf); //first->link 默认值为 NULL cin >> val; while (val!= endtag) { newnode = new LinkNode<T, E>(val); newnode->link = newf->link; // 插在表前端 newf->link = newnode; cin >> val; } };

70 后插创建 (inputrear)

71 后插法建立单链表 每次将新结点加在链表的表尾 ; 设置一个尾指针 last, 总是指向表中最后一个结点, 新结点插在它的后面 ; 尾指针 last 初始时置为指向表头结点地址 first last 0 newnode last 0 last newnode last 0 0

72 template <class T, class E> void inputrear ( T endtag, List<T, E>& L ) { LinkNode<T, E> *newnode, *last; E val; last = new LinkNode<T, E>; // 建立链表的头结点 L.setFirst(last); // 为链表 L 的 first 赋值 cin >> val; while ( val!= endtag ) { //last 指向当前的表尾 }; newnode = new LinkNode<T, E>(val); last->link = newnode; last = newnode; cin >> val; // 插入到表末端 } last->link = NULL; // 表收尾

73 链表的长度 (Length)

74 first first first first c = 0 a 0 a 1 a 2 p a 0 a 1 a 2 c = 1 p a 0 a 1 a 2 c = 2 p a 0 a 1 a 2 c = 3 p

75 求单链表的长度的算法 template <class T, class E> int List<T, E> :: Length ( ) const { ListNode<T, E> *p = first->link; // 检测指针 p 指示第一号结点 int count = 0; while ( p!= NULL ) { // 逐个结点检测 p = p->link; count++; } return count; }

76 置空 (makeempty) ( 保留表头结点 )

77 first first first first a 0 a 1 q a 1 q current a 2 a 2 a 2 q

78 template <class T, class E> void List<T, E>::makeEmpty() { LinkNode<T, E> *q; while (first->link!= NULL) { q = first->link; // 保存被删结点 } }; 链表置空算法 ( 保留表头结点 ) first->link = q->link; // 从链上摘下该结点 delete q; // 删除

79 单链表的搜索算法 template <class T, class E> LinkNode<T, E> *List<T, E>::Search(T x) { // 在表中搜索含数据 x 的结点, 搜索成功时函数返 // 该结点地址 ; 否则返回 NULL LinkNode<T, E> *current = first->link; while ( current!= NULL && current->data!= x ) current = current->link; // 沿着链找含 x 结点 return current; };

80 单链表的定位算法 template <class T, class E> LinkNode<T, E> *List<T, E>::Locate ( int i ) { // 函数返回表中第 i 个元素的地址 若 i < 0 或 i 超 // 出表中结点个数, 则返回 NULL }; if (i < 0) return NULL; //i 不合理 LinkNode<T, E> *current = first; int k = 0; while ( current!= NULL && k < i ) { current = current->link; k++; } return current; // 返回第 i 号结点地址或 NULL

81 单链表的插入算法 template <class T, class E> bool List<T, E>::Insert (int i, E x) { // 将新元素 x 插入在链表中第 i 个结点之后 LinkNode<T, E> *current = Locate(i); if (current == NULL) return false; // 无插入位置 LinkNode<T, E> *newnode = new LinkNode<T, E>(x); // 创建新结点 newnode->link = current->link; // 链入 current->link = newnode; return true; // 插入成功 };

82 单链表的删除算法 template <class T, class E> bool List<T, E>::Remove (int i, E& x ) { // 删除链表第 i 个元素, 通过引用参数 x 返回元素值 LinkNode<T, E> *current = Locate(i-1); if ( current == NULL current->link == NULL) return false; // 删除不成功 LinkNode<T, E> *del = current->link; current->link = del->link; x = del->data; delete del; return true; };

83 第二章线性表 定义 基本操作 实现 顺序存储 链式存储 应用 多项式

84 i n i i n n n x a x a x a x a a x P ) ( 多项式 (Polynomial) n 阶多项式 P n (x) 有 n+1 项 系数 a 0, a 1, a 2,, a n 指数 0, 1, 2,, n, 按升幂排列

85 多项式 (polynomial) 顺序存储

86 第一种 : private: ( 静态数 int degree; 组表示 ) float coef [maxdegree+1]; P n (x) 可以表示为 : pl.degree = n pl.coef[i] = a i, 0 i n coef degree maxdegree a 0 a 1 a 2 a n n

87 第二种 :private: ( 动态数 int degree; 组表示 ) float * coef; Polynomial :: Polynomial (int sz) { degree = sz; coef = new float [degree + 1]; }

88 以上两种存储表示 适用于指数连续排列的多项式 但对于绝大多数项的系数为零的多项式 不经济 如 P 101 (x) = 3+5x 50-4x 101

89 第三种 : i m coef a 0 a 1 a 2 a i a m exp e 0 e 1 e 2 e i e m struct term { // 多项式的项定义 float coef; // 系数 int exp; // 指数 }; static term termarray[maxterms]; // 项数组 static int free, maxterms; // 当前空闲位置

90 初始化 : // term Polynomial::termArray[MaxTerms]; // int Polynomial::free = 0; class Polynomial { public: private: int start, finish; } // 多项式定义 // 多项式始末位置

91 两个多项式存储的例子 A(x) = 2.0x B(x) = x x 101 A.start A.finish B.start B.finish free maxterms coef exp 两个多项式存放在 termarray 中

92 多项式 (polynomial) 链式存储

93 多项式的链表存储 多项式顺序存储表示的缺点 : 插入和删除时项数可能有较大变化, 因此要移动大量数据 不利于多个多项式的同时处理 多项式的链表表示 : 多项式的项数可以动态地增长, 不存在存储溢出问题 插入 删除方便, 不移动元素

94 多项式的链表结构 结点三个数据成员 : Data Term coef exp link Link: 将多项式各项按指数递增的顺序链接成一个单链表 新项的加入 : 执行简单的链表插入操作 废项的删除 : 执行简单的链表删除操作

95 多项式 (polynomial) 类定义

96 多项式 (polynomial) 类的链表定义 struct Term { // 多项式结点定义 float coef; // 系数 int exp; // 指数 Term *link; // 链接指针 Term (float c, int e, Term *next = NULL) { coef = c; exp = e; link = next;} Term *InsertAfter ( float c, int e); friend ostream& operator << (ostream&, const Term& ); };

97 class Polynomial {// 多项式类的定义 public: Polynomal() { first = new Term(0, -1);} // 构造函数 Polynomal ( Polynomal& R); // 复制构造函数 int maxorder(); // 计算最大阶数 private: Term *first; friend ostream& operator << (ostream&, const Polynomal& ); friend istream& operator >> ( istream&, Polynomal& );

98 }; friend void Add ( Polynomial& A, Polynomial& B, Polynomial& C ); friend void Mul ( Polynomial& A, Polynomial& B, Polynomial& C ); Term *Term::InsertAfter ( float c, int e ) { // 在调用此函数的对象后插入一个新项 link = new Term (c, e, link); // 创建一个新结点, 自动链接 return link; // 插入到 this 结点后面 };

99 ostream& operator << (ostream& out, const Term& x) { //Term 的友元函数 : 输出一个项 x 的内容到输出流对 // 象 out 中去 if (x.coef == 0.0) return out; // 零系数项不输出 out << x.coef; // 输出系数 switch (x.exp) { // 输出指数 }; case 0: break; // 指数为 0, 不出现 X case 1: out << X ; break; // 在系数后输出 X default: out << X^ << x.exp; break; // 否则 } return out;

100 istream& operator >> (istream& in, Polynomal& x) { //Polynomal 类的友元函数 : 从输入流 in 输入各项, // 用尾插法建立一个多项式 Term *rear = x.first; intc, e; //rear 是尾指针 while (1) { cout << Input a term(coef, exp): << endl; in >> c >> e; // 输入项的系数 c 和指数 e if ( e < 0 ) break; // 用 e < 0 控制输入结束 }; rear = rear->insertafter(c, e);// 链接到 rear 后 } return in;

101 ostream& operator << (ostream& out, Polynomal& x) {//Polynomal 类的友元函数 : 输出带头结点的多项式 // 链表 x Term *current = x.first->link; out << The polynomal is: << endl; out << *current; // 调用 Term 的重载操作 << }; while (current!= NULL) { out << + << *current; current = current->link; } out << endl; return out; // 逐项输出

102 多项式相加 (Add)

103 两个多项式的相加算法 设两个多项式都带表头结点, 检测指针 pa 和 pb 分别指示两个链表当前检测结点, 设结果多项式的表头指针为 C, 存放指针为 pc, 初始位置在 C 的表头结点

104 当 pa 和 pb 没有检测完各自的链表时, 比较当前检测结点的指数域 : 指数不等 : 小者加入 C 链, 相应检测指针 pa 或者 pb 进 1; 指数相等 : 对应项系数相加 若相加结果不为零, 则结果加入 C 链,pa 与 pb 进 1 当 pa 或 pb 指针中有一个为 NULL, 则把另一个链表的剩余部分加入到 C 链

105 多项式链表的相加 AH = 1-3x 6 + 7x 12 BH = - x 4 + 3x 6-9x x 14 CH = 1 - x 4-9x x x 14 AH.first BH.first CH.first

106 pa AH.first BH.first CH.first pc pb

107 pa AH.first BH.first pb pc CH.first 1 0

108 pa AH.first BH.first pb pc CH.first

109 pa AH.first BH.first tmp = -3+3 = 0 pc pb CH.first

110 pa AH.first BH.first pb CH.first pc -9 10

111 pa AH.first BH.first pb CH.first pc 7 12

112 pa AH.first BH.first pb p CH.first pc

113 friend void Add(Polynomal& A, Polynomal& B, Polynomal& C) { // 友元函数 : 两个带表头结点的按升幂排列的 // 多项式链表的头指针分别是 A.first 和 //B.first, 结果为多项式链表 C. Term *pa, *pb, *pc, *p; floattemp; pc = C.first; // 结果链尾指针 pa = A.first->link; //A 链检测指针 pb = B.first->link; //B 链检测指针 while (pa!= NULL && pb!= NULL) {

114 if (pa->exp == pb->exp) { // 对应项指数相等 temp = pa->coef + pb->coef; if ( fabs(temp) > 0.001) pc = pc->insertafter(temp, pa->exp); pa = pa->link; pb = pb->link; } else if (pa->exp < pb->exp) { //pa 指数小 pc = pc->insertafter(pa->coef, pa->exp); pa = pa->link; } else { } //pb 指数小 pc = pc->insertafter(pb->coef, pb->exp); pb = pb->link;

115 }; p = (pa!= NULL)? pa : pb; //p 指示剩余链 while (p!= NULL) { pc = pc->insertafter(p->coef, p->exp); p = p->link; }

116 第二章线性表 扩展 循环链表 双向链表

117 循环链表 (Circular List) 循环链表是单链表的变形 循环链表的最后一个结点的 link 指针不为 NULL, 而是指向了表的前端 为简化操作, 在循环链表中往往加入表头结点 循环链表的特点是 : 只要知道表中某一结点的地址, 就可搜寻到所有其他结点的地址

118 循环链表的示例 first a 0 a 1 a 2 a n-1 带表头结点的循环链表 first a 0 a 1 a n-1 first ( 空表 ) ( 非空表 )

119 循环链表类定义

120 循环链表类定义 template <class T, class E> struct CircLinkNode { // 链表结点类定义 E data; CircLinkNode<T, E> *link; CircLinkNode ( CircLinkNode<T, E> *next = NULL ) { link = next; } CircLinkNode ( E d, CircLinkNode<T, E> *next = NULL ) { data = d; link = next; } bool Operator==(E x) { return data == x; } bool Operator!=(E x) { return data!= x; } };

121 template <class T, class E> // 链表类定义 class CircList : public LinearList<T, E> { private: CircLinkNode<T, E> *first, *last; // 头指针, 尾指针 public: CircList(const E x); // 构造函数 CircList(CircList<T, E>& L); // 复制构造函数 ~CircList(); // 析构函数 int Length() const; // 计算链表长度 bool IsEmpty() { return first->link == first; } // 判表空否 CircLinkNode<T, E> *gethead() const; // 返回表头结点地址

122 }; void sethead ( CircLinkNode<T, E> *p ); // 设置表头结点地址 CircLinkNode<T, E> *Search ( T x ); // 搜索 CircLinkNode<T, E> *Locate ( int i ); // 定位 E *getdata ( int i ); // 提取 void setdata ( int i, E x ); // 修改 bool Insert ( int i, E x ); // 插入 bool Remove ( int i, E& x); // 删除 循环链表与单链表的操作实现, 最主要的不同就是扫描到链尾, 遇到的不是 NULL, 而是表头

123 搜索 (Search)

124 循环链表的搜索算法 first 搜索 15 current current current 搜索成功 first current 搜索 25 current current current current 搜索不成功

125 循环链表的搜索算法 template <class T, class E> CircListNode<T, E> * CircList<T, E>::Search( T x ) { // 在链表中从头搜索其数据值为 x 的结点 current = first->link; while ( current!= first && current->data!= x ) current = current->link; return current; }

126 带尾指针的循环链表 rear 如果插入与删除仅在链表的两端发生, 可采用带表尾指针的循环链表结构 在表尾插入, 时间复杂性 O(1) 在表尾删除, 时间复杂性 O(n) 在表头插入, 相当于在表尾插入 在表头删除, 时间复杂性 O(1)

127 应用 -- 约瑟夫问题

128 用循环链表求解约瑟夫问题 约瑟夫问题的提法 n 个人围成一个圆圈, 首先第 1 个人从 1 开始, 一个人一个人顺时针报数, 报到第 m 个人, 令其出列 然后再从下一个人开始, 从 1 顺时针报数, 报到第 m 个人, 再令其出列,, 如此下去, 直到圆圈中只剩一个人为止 此人即为优胜者 用不带表头结点的循环链表来组织

129 例如 n = 8 m =

130 n = 8 m =

131 void main() { CircList<int, int> clist; int i, n m; cout << 输入游戏者人数和报数间隔 : ; cin >> n >> m; for (i = 1; i <= n; i++ ) clist.insert(i, i); // 约瑟夫环 Josephus(clist, n, m); // 解决约瑟夫问题 }

132 求解 Josephus 问题的算法 #include <iostream.h> #include CircList.h template <class T, class E> void Josephus(CircList<T, E>& Js, int n, int m) { CircLinkNode<T, E> *p = Js.getHead(); CircLinkNode<T, E> *pre = NULL; } int i, j; for ( i = 0; i < n-1; i++ ) { // 执行 n-1 次 for ( j = 1; j < m; j++) // 数 m-1 个人 { pre = p; p = p->link; } cout << 出列的人是 << p->data << endl; pre->link = p->link; delete p; // 删去 p = pre->link; }

133 第二章线性表 扩展 循环链表 双向链表

134 双向链表 (Doubly Linked List) 双向链表是指在前驱和后继方向都能游历 ( 遍历 ) 的线性链表 双向链表每个结点结构 : llink data rlink 前驱方向 后继方向 双向链表通常采用带表头结点的循环链表形式

135 first first 非空表 空表 结点指向 p == p->llink->rlink == p->rlink->llink rlink llink p->llink p p->rlink

136 双向循环链表类定义

137 双向循环链表类定义 template <class T, class E> struct DblNode { // 链表结点类定义 E data; // 链表结点数据 DblNode<T,E> *llink, *rlink; // 前驱 后继指针 DblNode ( DblNode<T,E> *l = NULL, DblNode<T,E> *r = NULL ) { llink = l; rlink = r; } // 构造函数 DblNode ( E value, DblNode<T, E> *l = NULL, DblNode<T,E> *r = NULL) { data = value; llink = l; rlink = r; } // 构造函数 };

138 template <class T, class E> class DblList { // 链表类定义 public: DblList ( E uniqueval ) { // 构造函数 first = new DblNode<T, E> (uniqueval); first->rlink = first->llink = first; }; DblNode<T, E> *getfirst () const { return first; } void setfirst ( DblNode<T, E> *ptr ) { first = ptr; } DblNode<T, E> *Search ( T x, int d); // 在链表中按 d 指示方向寻找等于给定值 x 的结点, //d=0 按前驱方向,d 0 按后继方向

139 DblNode<T, E> *Locate ( int i, int d ); // 在链表中定位序号为 i( 0) 的结点, d=0 按前驱方 // 向,d 0 按后继方向 bool Insert ( int i, E x, int d ); // 在第 i 个结点后插入一个包含有值 x 的新结点,d=0 // 按前驱方向,d 0 按后继方向 bool Remove ( int i, E& x, int d ); // 删除第 i 个结点 bool IsEmpty() { return first->rlink == first; } // 判双链表空否 private: DblNode<T, E> *first; // 表头指针 };

140 搜索 (Search)

141 双向循环链表的搜索算法 first 搜索 15 搜索成功 first 搜索 25 搜索不成功

142 双向循环链表的搜索算法 template <class T, class E> DblNode<T, E> *DblList<T, E>::Search (T x, int d) { // 在双向循环链表中寻找其值等于 x 的结点 DblNode<T,E> *current = (d == 0)? first->llink : first->rlink; // 按 d 确定搜索方向 while ( current!= first && current->data!= x ) current = (d == 0)? current->llink : current->rlink; if ( current!= first ) return current; // 搜索成功 else return NULL; // 搜索失败 };

143 插入 (Insert)

144 双向循环链表的插入算法 ( 非空表 ) first 后插入 25 first current current newnode newnode->rlink = current->rlink; current->rlink = newnode; newnode->rlink->llink = newnode; newnode->llink = current;

145 双向循环链表的插入算法 ( 空表 ) first first 25 后插入 25 current current newnode newnode->rlink = current->rlink (newnode->rlink = first); current->rlink = newnode; newnode->rlink ->llink = newnode; ( first->llink = newnode ) newnode->llink = current;

146 双向循环链表的插入算法 template <class T, class E> bool DblList<T, E>::Insert ( int i, E x, int d ) { // 建立一个包含有值 x 的新结点, 并将其按 d 指定的 // 方向插入到第 i 个结点之后 DblNode<T, E> *current = Locate(i, d); // 按 d 指示方向查找第 i 个结点 if ( current == NULL ) return false; // 插入失败 DblNode<T,E> *newnd = new DblNode<T,E>(x); if (d == 0) { // 前驱方向 : 插在第 i 个结点左侧 newnd->llink = current->llink; // 链入 llink 链 current->llink = newnd;

147 newnd->llink->rlink = newnd; // 链入 rlink 链 newnd->rlink = current; } else { // 后继方向 : 插在第 i 个结点后面 newnd->rlink = current->rlink; // 链入 rlink 链 current->rlink = newnd; newnd->rlink->llink = newnd; // 链入 llink 链 newnd->llink = current; } return true; // 插入成功 };

148 删除 (Remove)

149 双向循环链表的删除算法 first 非空表 删除 48 first current current current->rlink->llink = current->llink; current->llink->rlink = current->rlink;

150 双向循环链表的删除算法 template <class T, class E> bool DblList<T, E>::Remove( int i, E& x, int d ) { // 在双向循环链表中按 d 所指方向删除第 i 个结点 DblNode<T, E> *current = Locate (i, d); }; if (current == NULL) return false; current->rlink->llink = current->llink; current->llink->rlink = current->rlink; // 从 llink 链和 rlink 链中摘下 // 删除失败 x = current->data; delete current; // 删除 return true; // 删除成功

151 静态链表

152 静态链表 为数组中每一个元素附加一个链接指针, 就形成静态链表结构 处理时中可以不改变各元素的物理位置, 只要重新链接就能改变这些元素的逻辑顺序 它是利用数组定义的, 在整个运算过程中存储空间的大小不会变化 静态链表每个结点由两个数据成员构成 : data 域存储数据,link 域存放链接指针 所有结点形成一个结点数组,

153 静态链表的结构 first a 1 a 2 a 3 a 4 a 5 Λ data a 3 a 4 a 1 a 5 a 2 link (0) 1 0 号是表头结点,link 给出首元结点地址 循环链表收尾时 link = 0, 回到表头结点 如果不是循环链表, 收尾结点指针 link = -1 link 指针是数组下标, 因此是整数

154 The END

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

Microsoft PowerPoint - DS_Ch2_EN [兼容模式]

Microsoft PowerPoint - DS_Ch2_EN [兼容模式] Data Structure Ch.2 Linear List Dr. He Emil Huang School of Computer Science and Technology Soochow University 苏州大学计算机科学与技术学院网络工程系 本章 ppt 与教材对应情况 本章涉及所有内容涵盖了教材以下章节 P212~P233 6.1 (List definition 表的定义 )

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 Word - 专升本练习2:线性表.doc

Microsoft Word - 专升本练习2:线性表.doc 第二章 线性表 一 选择题 1. 线性表是 ( ) A. 一个有限序列, 可以为空 B. 一个有限序列, 不能为空 C. 一个有限序列, 可以为空 D. 一个无序序列, 不能为空 2. 对顺序存储的线性表, 设其长度为 n, 在任何位置上插入或删除操作都是等概率 插入一个元素 时大约要移动表中的 ( ) 个元素, 删除一个元素时大约要移动表中的 ( ) 个元素 A. n/2 B. (n+1)/2 C.

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

新版 明解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

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

FY.DOC

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

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

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

Microsoft PowerPoint - 2线性表.ppt [兼容模式]

Microsoft PowerPoint - 2线性表.ppt [兼容模式] 2 线性表 董洪伟 http://hwdong.com 1 主要内容 线性表的类型定义 即抽象数据类型 顺序实现 即用一连续的存储空间来表示 链式实现 即用链表实现 一元稀疏多项式 链表实现 2 线性表的类型定义 线性表 n 个元素的有限序列 数据项 元素 ( 记录 ) 姓名 学号 性别 年龄 班级 健康状况 王小林 790631 男 18 计 91 健康 陈红 790632 女 20 计 91 一般

More information

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

C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 MYQUEUE 1 MyQueue 题目描述 设计一个 MyQueue 类模板, 类模板说明如下 : template class MyQueue; template std::ostream & operator

More information

Microsoft PowerPoint - DS_Ch2.ppt [兼容模式]

Microsoft PowerPoint - DS_Ch2.ppt [兼容模式] 数据结构 Ch.2 线性表 计算机学院 肖明军 Email: xiaomj@ustc.edu.cn http://staff.ustc.edu.cn/~xiaomj 2.1 线性表的逻辑结构 线性表 : 由 n(n 0) 个结点 a 1,, a n 组成的有限序列 记作 :L = (a 1, a 2,, a n ), 属性 : 长度 ---- 结点数目 n,n=0 时为空表 a i ---- 一般是同一类型

More information

Microsoft Word - 数据结构实训与习题725xdy.doc

Microsoft Word - 数据结构实训与习题725xdy.doc 第一部分学习指导与实训 3 第 2 章线性表 2.1 学习指南 (1) 理解线性表的类型定义, 掌握顺序表和链表的结构差别 (2) 熟练掌握顺序表的结构特性, 熟悉顺序表的存储结构 (3) 熟练掌握顺序表的各种运算, 并能灵活运用各种相关操作 (4) 熟练掌握链式存储结构特性, 掌握链表的各种运算 2.2 内容提要 线性表的特点 : 线性表由一组数据元素构成, 表中元素属于同一数据对象 在线性表中,

More information

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

C++ 程序设计 OJ4 - 参考答案 MASTER 2017 年 5 月 21 日 1 C++ 程序设计 OJ4 - 参考答案 MASTER 2017 年 5 月 21 日 1 1 SWAP 1 Swap 题目描述 用函数模板的方式实现对不同数据类型的数组中的数据进行输入 从小到大排序和输出 使用如下主函数测试你的模板设计一个函数模板 Swap, 实现任意数据类型的两个数据的交换, 分别用 int 型 double 型和 char 型的数据进行测试 main 函数如下 : int main()

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

2

2 孙猛 http://www.math.pku.edu.cn/teachers/sunm 2017 年 9 月 18 日 课程主 页 : http://www.math.pku.edu.cn/teachers/sunm/ds2017/ 作业通过 course.pku.edu.cn 提交 2 线性表的概念和抽象数据类型 顺序表示 链接表示 3 4 线性表 ( 简称为表 ) 是零个或多个元素的有穷序列列

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

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

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

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

数据结构 Data Structure

数据结构 Data Structure 第三章 : 线性表 线性表 定义 : 线性表 L 是 n 个数据元素 a 0,a, a n- 的有限序列, 记作 L=(a 0,a, a n- ) 其中元素个数 n(n 0) 定义为表 L 的长度 当 n=0 时,L 为空表, 记作 ( ) 特性 : 在表中, 除第一个元素 a 0 外, 其他每一个元素 a i 有一个且仅有 一个直接前驱 a i- 除最后一个元素 a n- 外, 其他每一个元素 a

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

无类继承.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 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

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

C/C++ - 文件IO

C/C++ - 文件IO C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;

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

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

C++ 程序设计 OJ10 - 参考答案 MASTER 2019 年 6 月 17 日 1 C++ 程序设计 OJ10 - 参考答案 MASTER 2019 年 6 月 17 日 1 1 STRINGREVERSE 1 StringReverse 题目描述 利用 string 类对字符串进行 ( 按反转后字典序 ) 排序并输出, 例如两个字符串为 aab, cba, 则 cba 应该排在 aab 之前, 因为 cba 反转后为 abc, aab 反转后为 baa. 输入 第一行为一个整数

More information

PowerPoint Presentation

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

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

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

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

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

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

Microsoft Word - 01.DOC

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

More information

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

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 CIRCLE 1 Circle 描述 编写一个圆类 Circle, 实现半径的输入 面积的计算和输出 输入 圆的半径 (double 类型 ) 输出 圆的面积 ( 保留小数点后两位 ) 样例输入 3 样例输出 28.27 提示 圆周率的取值需要比较精确, 以保证计算结果的精度 #include

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

Microsoft PowerPoint - ds_2.ppt

Microsoft PowerPoint - ds_2.ppt 第二章线性表 2.1 线性表的概念 2.2 顺序表示 2.3 链接表示 2.4 应用举例 -Josehus 问题另外介绍 动态顺序表 程序里常需要保存一批某种类型的元素, 这些元素的数目可能变化 ( 可以加入或删除元素 ) 有时需要把这组元素看成一个序列, 元素的顺序可能表示实际应用中的某种有意义的关系这样一组元素可以抽象为元素的一个线性表 线性表是元素的集合, 同时记录了元素的顺序关系 线性表是一种最基本的数据结构,

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

<4D6963726F736F667420576F7264202D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

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

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

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

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

Microsoft PowerPoint - 第+2+章+线性表[check].ppt [兼容模式]

Microsoft PowerPoint - 第+2+章+线性表[check].ppt [兼容模式] 教学内容 1 线性表的定义和性质及基本运算 2 线性表的顺序存储结构 3 线性表的链式存储结构 4 多项式的代数运算 线性结构的特点 : 数据元素的非空有限集 存在唯一的一个被称作 第一个 的数据元素 ; 存在唯一的一个被称作 最后一个 的数据元素 ; 除第一个之外的数据元素均只有一个前驱 ; 除最后一个之外的数据元素均只有一个后继 例 : 法学系 8523101 第一个 数据元素 国贸系 8522105

More information

C/C++程序设计 - 字符串与格式化输入/输出

C/C++程序设计 - 字符串与格式化输入/输出 C/C++ / Table of contents 1. 2. 3. 4. 1 i # include # include // density of human body : 1. 04 e3 kg / m ^3 # define DENSITY 1. 04 e3 int main ( void ) { float weight, volume ; int

More information

提问袁小兵:

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

More information

C++ 程序设计 实验 2 - 参考答案 MASTER 2017 年 5 月 21 日 1

C++ 程序设计 实验 2 - 参考答案 MASTER 2017 年 5 月 21 日 1 C++ 程序设计 实验 2 - 参考答案 MASTER 2017 年 5 月 21 日 1 1 CRECT 类 1 CRect 类 设计矩形类, 包含 长度和宽度信息 基本构造函数 基础属性的访问接口 ( 读 / 写, Read/Write, Get/Set) 计算周长和面积 ( 注 : 基本构造函数, 一个无参数的默认构造函数, 以及一个初始化数据成员的构造函数如果数据成员的初始化有多种形式, 就提供多个构造函数

More information

C++ 程序设计 实验 1 - 参考答案 MASTER 2017 年 5 月 21 日 1

C++ 程序设计 实验 1 - 参考答案 MASTER 2017 年 5 月 21 日 1 C++ 程序设计 实验 1 - 参考答案 MASTER 2017 年 5 月 21 日 1 1 简单图形 1 简单图形 输入图形的行数 ( 如下图 7 行 ), 输出如下图所示图形 * *** ***** ******* ***** *** * 2 1 简单图形 1 #inc lude 2 using namespace std ; 3 4 // 注意变量命名的方式 5 //

More information

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

C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 PERSON 1 Person 题目描述 编写程序, 定义一个基类 Person, 包含 name 和 age 两个数据成员 ; 再由它派生出学生类 Student 和教师类 Teacher, 其中学生类添加学号 no 数据, 教师类添加职称 title 数据 ; 要求每个类均有构造函数 析构函数和显示数据的函数

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

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

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

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

More information

Microsoft Word - 970617cppFinalSolution.doc

Microsoft Word - 970617cppFinalSolution.doc 國 立 台 灣 海 洋 大 學 資 訊 工 程 系 C++ 程 式 設 計 期 末 考 參 考 答 案 姓 名 : 系 級 : 學 號 : 97/06/17 考 試 時 間 :10:00 12:10 試 題 敘 述 蠻 多 的, 看 清 楚 題 目 問 什 麼, 針 對 重 點 回 答 是 很 重 要 的 ; 不 確 定 的 請 一 定 要 當 場 提 出 來, 不 要 白 花 力 氣 在 誤 會

More information

C/C++ - 数组与指针

C/C++ - 数组与指针 C/C++ Table of contents 1. 2. 3. 4. 5. 6. 7. 8. 1 float candy [ 365]; char code [12]; int states [50]; 2 int array [6] = {1, 2, 4, 6, 8, 10}; 3 // day_mon1.c: # include # define MONTHS 12 int

More information

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

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

More information

nooog

nooog C : : : , C C,,, C, C,, C ( ), ( ) C,,, ;,, ; C,,, ;, ;, ;, ;,,,, ;,,, ; : 1 9, 2 3, 4, 5, 6 10 11, 7 8, 12 13,,,,, 2008 1 1 (1 ) 1.1 (1 ) 1.1.1 ( ) 1.1.2 ( ) 1.1.3 ( ) 1.1.4 ( ) 1.1.5 ( ) 1.2 ( ) 1.2.1

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 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

程序设计语言及基础

程序设计语言及基础 Chapter 10 Classes: A Deeper Look, Part 2 http://jssec.seu.edu.cn 杨明 yangming2002@seu.edu.cn OBJECTIVES To specify const (constant) objects and const member functions. To create objects composed of other

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

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

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

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

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

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

More information

C/C++ 语言 - 循环

C/C++ 语言 - 循环 C/C++ Table of contents 7. 1. 2. while 3. 4. 5. for 6. 8. (do while) 9. 10. (nested loop) 11. 12. 13. 1 // summing.c: # include int main ( void ) { long num ; long sum = 0L; int status ; printf

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

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

没有幻灯片标题

没有幻灯片标题 指针作为函数参数 : 原因 : 1 需要修改一个或多个值,( 用 return 语句不能解决问题 ) 2 执行效率的角度 使用方法 : 在函数原型以及函数首部中需要声明能够接受指针值的形参, 具体的写法为 : 数据类型 * 形参名 如果有多个指针型形参, 则用逗号分隔, 例如 : void swap(int *p1, int *p2) 它说明了形参 p1 p2 是指向整型变量的指针 在函数调用时,

More information

Strings

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

More information

C/C++语言 - 分支结构

C/C++语言 - 分支结构 C/C++ Table of contents 1. if 2. if else 3. 4. 5. 6. continue break 7. switch 1 if if i // colddays.c: # include int main ( void ) { const int FREEZING = 0; float temperature ; int cold_ days

More information

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3 浙江大学 C 程序设计及实验 试题卷 2002-2003 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:30-10:30 注意 : 答题内容必须写在答题卷上, 写在本试题卷上无效 一. 单项选择题 ( 每题 1 分, 共 10 分 ) 1. 下列运算符中, 优先级最低的是 A.

More information

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不 1. 右 側 程 式 正 確 的 輸 出 應 該 如 下 : * *** ***** ******* ********* 在 不 修 改 右 側 程 式 之 第 4 行 及 第 7 行 程 式 碼 的 前 提 下, 最 少 需 修 改 幾 行 程 式 碼 以 得 到 正 確 輸 出? (A) 1 (B) 2 (C) 3 (D) 4 1 int k = 4; 2 int m = 1; 3 for (int

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

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

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

More information

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2 PowerBuilder 9 PowerBuilder Native Interface(PBNI) PowerBuilder 9 PowerBuilder C++ Java PowerBuilder 9 PBNI PowerBuilder Java C++ PowerBuilder NVO / PowerBuilder C/C++ PowerBuilder 9.0 PowerBuilder Native

More information

Microsoft PowerPoint - DS_Ch5.ppt [兼容模式]

Microsoft PowerPoint - DS_Ch5.ppt [兼容模式] 数据结构 Ch.5 数组和广义表 计算机学院 肖明军 Email: xiaomj@ustc.edu.cn http://staff.ustc.edu.cn/~xiaomj 多维数组 是最易处理的非线性结构 因为各元素类型一致, 各维上下界固定, 所以它最容易线性化, 故可看做是线性表的拓广 例如 : 二维数组可以看做是由列向量组成的线性表 1. 结构特性 例 : 二维数组, 它属于两个向量 ;i th

More information

C++ 程式設計

C++ 程式設計 C C 料, 數, - 列 串 理 列 main 數串列 什 pointer) 數, 數, 數 數 省 不 不, 數 (1) 數, 不 數 * 料 * 數 int *int_ptr; char *ch_ptr; float *float_ptr; double *double_ptr; 數 (2) int i=3; int *ptr; ptr=&i; 1000 1012 ptr 數, 數 1004

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

幻灯片 1

幻灯片 1 第三课类和对象 ( 封装 ) 互联网新技术在线教育领航者 1 内容概述 1. 封装的概念 2. 访问控制 3. 栈类的封装 4. 构造与析构 5.myString 构造函数 6. 构造与析构的次序 7. 类文件写法 8. 对象的内存 9.this 指针初探 10. 构造函数初始值列表 11. 拷贝构造和赋值运算符重载 12. 浅拷贝 13. 深拷贝 14. 成员函数内联 15. 友元 16.const

More information

PowerPoint Presentation

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

More information

Microsoft Word - 11.doc

Microsoft Word - 11.doc 除 錯 技 巧 您 將 於 本 章 學 到 以 下 各 項 : 如 何 在 Visual C++ 2010 的 除 錯 工 具 控 制 下 執 行 程 式? 如 何 逐 步 地 執 行 程 式 的 敘 述? 如 何 監 看 或 改 變 程 式 中 的 變 數 值? 如 何 監 看 程 式 中 計 算 式 的 值? 何 謂 Call Stack? 何 謂 診 斷 器 (assertion)? 如 何

More information

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha CYPOK CYPOK 1 UltraEdit Project-->Install Language Tool: Language Suite----->hi-tech picc Tool Name ---->PICC Compiler Executable ---->c:hi-picinpicc.exe ( Command-line Project-->New Project-->File Name--->myc

More information

第七讲 继承与多态

第七讲  继承与多态 第 七 章 继 承 与 派 生 1 本 章 主 要 内 容 的 继 承 成 员 的 访 问 控 制 单 继 承 与 多 继 承 派 生 的 构 造 析 构 函 数 成 员 的 标 识 与 访 问 深 度 探 索 2 的 继 承 与 派 生 的 继 承 与 派 生 保 持 已 有 的 特 性 而 构 造 新 的 过 程 称 为 继 承 在 已 有 的 基 础 上 新 增 自 己 的 特 性 而 产 生

More information

Open topic Bellman-Ford算法与负环

Open topic   Bellman-Ford算法与负环 Open topic Bellman-Ford 2018 11 5 171860508@smail.nju.edu.cn 1/15 Contents 1. G s BF 2. BF 3. BF 2/15 BF G Bellman-Ford false 3/15 BF G Bellman-Ford false G c = v 0, v 1,..., v k (v 0 = v k ) k w(v i 1,

More information

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii 前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii C# 7 More Effective C# C# C# C# C# C# Common Language Runtime CLR just-in-time

More information

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

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

untitled

untitled (encapsulation) 例 類 說 類 料 來 料 information hiding 念 (inheritance) 來說 類 類 類 類 類 類 行 利 來 (polymorphism) 不 類 數 不 1 2 3 4 類 類 不 類 不 類 5 6 7 // virtual 不見了 #include #include using namespace

More information

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

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

More information

Microsoft PowerPoint - Model Checking a Lazy Concurrent List-Based Set Algorithm.ppt [Compatibility Mode]

Microsoft PowerPoint - Model Checking a Lazy Concurrent List-Based Set Algorithm.ppt [Compatibility Mode] Model Checking a Lazy Concurrent List-Based Set Algorithm ZHANG Shaojie, LIU Yang National University of Singapore Agenda Introduction Background Ourapproach Overview Linearizabilitydefinition Modelinglanguage

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

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023) ( CIP) /. :, 2005. 2 ( ) ISBN 7-5624-3339-9.......... TP311. 1 CIP ( 2005) 011794 : : : : * : : 174 ( A ) :400030 : ( 023) 65102378 65105781 : ( 023) 65103686 65105565 : http: / /www. cqup. com. cn : fxk@cqup.

More information

ebook14-4

ebook14-4 4 TINY LL(1) First F o l l o w t o p - d o w n 3 3. 3 backtracking parser predictive parser recursive-descent parsing L L ( 1 ) LL(1) parsing L L ( 1 ) L L ( 1 ) 1 L 2 L 1 L L ( k ) k L L ( 1 ) F i r s

More information

Microsoft Word - PHP7Ch01.docx

Microsoft Word - PHP7Ch01.docx PHP 01 1-6 PHP PHP HTML HTML PHP CSSJavaScript PHP PHP 1-6-1 PHP HTML PHP HTML 1. Notepad++ \ch01\hello.php 01: 02: 03: 04: 05: PHP 06:

More information

《大话设计模式》第一章

《大话设计模式》第一章 第 1 章 代 码 无 错 就 是 优? 简 单 工 厂 模 式 1.1 面 试 受 挫 小 菜 今 年 计 算 机 专 业 大 四 了, 学 了 不 少 软 件 开 发 方 面 的 东 西, 也 学 着 编 了 些 小 程 序, 踌 躇 满 志, 一 心 要 找 一 个 好 单 位 当 投 递 了 无 数 份 简 历 后, 终 于 收 到 了 一 个 单 位 的 面 试 通 知, 小 菜 欣 喜

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

untitled

untitled 不 料 料 例 : ( 料 ) 串 度 8 年 數 串 度 4 串 度 數 數 9- ( ) 利 數 struct { ; ; 數 struct 數 ; 9-2 數 利 數 C struct 數 ; C++ 數 ; struct 省略 9-3 例 ( 料 例 ) struct people{ char name[]; int age; char address[4]; char phone[]; int

More information

Strings

Strings Polymorphism and Virtual Functions Cheng-Chin Chiang Virtual Function Basics 多 型 (Polymorphism) 賦 予 一 個 函 數 多 種 意 涵, 存 在 於 同 一 類 別 之 內 祖 先 類 別 與 後 代 類 別 間 物 件 導 向 程 式 設 計 基 本 原 理 虛 擬 函 數 (Virtual Function)

More information

Microsoft PowerPoint - L17_Inheritance_v4.pptx

Microsoft PowerPoint - L17_Inheritance_v4.pptx C++ Programming Lecture 17 Wei Liu ( 刘 威 ) Dept. of Electronics and Information Eng. Huazhong University of Science and Technology May. 2015 Lecture 17 Chapter 20. Object-Oriented Programming: Inheritance

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

目 录 目 录 前言 第 章 绪论 知识点串讲 典型例题详解 课后习题与解答 第 章 线性表 知识点串讲 典型例题详解 课后习题与解答 第 章 栈和队列 知识点串讲 典型例题详解 课后习题与解答 第 章 串 知识点串讲 典型例题详解 课后习题与解答 第 章 数组和广义表 知识点串讲 典型例题详解 课

目 录 目 录 前言 第 章 绪论 知识点串讲 典型例题详解 课后习题与解答 第 章 线性表 知识点串讲 典型例题详解 课后习题与解答 第 章 栈和队列 知识点串讲 典型例题详解 课后习题与解答 第 章 串 知识点串讲 典型例题详解 课后习题与解答 第 章 数组和广义表 知识点串讲 典型例题详解 课 数据结构 语言版 例题详解与课程设计指导 主 编 秦 锋 袁志祥副主编 陈学进 王森玉郑 啸 程泽凯 合肥 目 录 目 录 前言 第 章 绪论 知识点串讲 典型例题详解 课后习题与解答 第 章 线性表 知识点串讲 典型例题详解 课后习题与解答 第 章 栈和队列 知识点串讲 典型例题详解 课后习题与解答 第 章 串 知识点串讲 典型例题详解 课后习题与解答 第 章 数组和广义表 知识点串讲 典型例题详解

More information