170 likes | 349 Views
序言. 小班化教学 研究性教学方法 教学网站 http://kczy.zjut.edu.cn/sjjg 教学计划安排 数据结构学习方法 理论+实践(编程). 序言. 数据结构课程 唐纳德 • 克努特 (Donald Ervin Knuth) :数据结构和算法的奠基者,鼻祖。 - 29 岁提出 “ 算法 ” (Algorithm) 和 “ 数据结构 ” (Data Structure) 这两个概念( 1967 年) - 36 岁获得计算机图灵奖( 1974 年) -巨著: The Art of Computer Programming
E N D
序言 • 小班化教学 • 研究性教学方法 • 教学网站 http://kczy.zjut.edu.cn/sjjg • 教学计划安排 • 数据结构学习方法 理论+实践(编程)
序言 数据结构课程 • 唐纳德•克努特(Donald Ervin Knuth):数据结构和算法的奠基者,鼻祖。 -29岁提出“算法”(Algorithm)和 “数据结构”(Data Structure)这两个概念(1967年) -36岁获得计算机图灵奖(1974年) -巨著:The Art of Computer Programming 第一卷《基本算法》介绍了数据的逻辑结构和存储结构及其操作 离散数学:面向数据本身的数学性质; 数据结构:更面向数据的存储结构; • 国外数据结构课程始于1968年; • 教材:《数据结构与算法分析》C++语言描述 http://cs.calvin.edu/books/c++/ds教材源代码
3 Main Index Contents Lecture 1 – Introduction to Data Type and Data Structure • Simple Data Type in C++ • -Integer • -Float,double • -char • -boolean • pointerVariable • Complex Data Type in C++ • -Static Array(one-dimensional array, two-dimensional array) • -Dynamic Array • Data Structure • ADT • Classes
Lecture 1 – Introduction to Data Type and Data Structure 4 Main Index Contents • 1.Unsigned integers • unsigned short, unsigned, unsigned long (8bit, 1 字节) • 存储采用二进制0和1 • 2.Signed integers • short, int, long(2,4字节) • 3.Float, Double • 22.625 = 10110.1012 • 4.Floating point form: 1.01101012 * 24 • 小数基本无法精确表示,如 • 0.7 = (0.10110011001100110011001100. . .)2 • 由存储带来的误差叫做舍入误差,可产生累计误差
Lecture 1 – Introduction to Data Type and Data Structure 5 Main Index Contents • 1.01101012 * 24 • 32位中1位是符号位,8为带符号指数,23为小数位 • 8位带符号指数,即可达到-127~+127 • 2-127~ 2127即1.7*10-38~ 1.7*1038
Lecture 1 – Introduction to Data Type and Data Structure 6 Main Index Contents • 5.Char字符 • 1 byte(8 bits) for ASCII—28=256 • 2 bytes(16 bits) for Unicode (java) or C++ wide character type • 6. Boolean • 0 or 1 (false or true) • 7. programmer-defined type • typedef double real; • 8. Enum 枚举类型
Lecture 1 – Introduction to Data Type and Data Structure 7 Main Index Contents • 9.Pointers指针 • 不同数据类型所占用空间不同,指向不同类型数据的指针所访问的地址空间范围不同; • 指针本身是内存空间地址; • 对指针*操作(间接引用运算符,取值操作)则访问指针所指向内存地址中的数据;
Lecture 1 – Introduction to Data Type and Data Structure 8 Main Index Contents • int * iptr,*jptr; • int i=11, j=22; • *iptr=i,*jptr=j; • jptr=iptr; //指向同一个数据空间; • *jptr=44; • int * intPtr; • intPtr = new int;//一般简单数据类型不使用new分配
Lecture 1 – Introduction to Data Type and Data Structure 9 Main Index Contents • Complex Data Type in C++ • 1. Static Array(one-dimensional array, two-dimensional array) • int a[10]; • char name[10]=“John Doe”; //char name[]=“John Doe”; • two-dimensional array: • float scoresTable[30][5];
Lecture 1 – Introduction to Data Type and Data Structure 10 Main Index Contents 二维数组:在C/C++中,按行存储
Lecture 1 – Introduction to Data Type and Data Structure 11 Main Index Contents • 2. Dynamic Array (new and delete) • int *arrayPtr; • arrayPtr = new int[6]; //申请的空间来自系统堆栈 • arrayPtr++;
Lecture 1 – Introduction to Data Type and Data Structure 12 Main Index Contents • delete [] arrayPtr; • 动态申请的存储空间必须及时释放,以防内存泄漏(memory leak) • 3. 动态数组/静态数组 • 可直接访问(或随机访问) • 动态数组可动态扩大空间,通过new重新申请; • 动态数组同静态数组一样,可通过下标访问,需支持下标操作; • 边界检查问题 • C++提供了Vector容器(即超级数组)
Lecture 1 – Introduction to Data Type and Data Structure 13 Main Index Contents • 4. Struct结构 • 具有不同类型的集合(multiple attributes) • struct date { int month, day, year; char dayOfWeek [12]; • }; • date today = { 3, 4, 2005, "Tuesday"); • cout << today.month; //访问struct的方法 • date *datePtr = &today; //使用指针访问struct • cout << (*datePtr).day; //使用指针访问成员数据cin >> datePtr->year; //输入成员数据 • Struct结构只包含数据,没有方法; • C++中Class类不仅包含数据,还有针对数据操作的各种方法;
Lecture 1 – Introduction to Data Type and Data Structure 14 Main Index Contents
Lecture 1 – Introduction to Data Type and Data Structure 什么是数据结构 • 数据结构 数据结构是组织和访问数据的系统方法。 组织:物理存储(数据) 访问(操作):查找、插入、删除、更新(方法) 为什么需要数据结构? • 问题求解=算法+数据结构 • 例如: 1.学生成绩排序(如何排序,如何快速查找) 2.建立客户信息(如何便于快速查找和删除) 3.交通网络问题(如最短路径问题,红绿灯设置问题)
Lecture 1 – Introduction to Data Type and Data Structure 主要的数据结构类型 两类基本结构:线性结构,非线性结构 线性结构包括:数组,向量,链表,栈,队列(列表结构) 非线性结构包括:二叉树,图 数据结构两个基本问题: 物理结构:物理存储方式 (1.静态的 2.动态的) 逻辑结构:数据间的逻辑关系 (1.线性 2.非线性) 注:线性结构:每个元素具有唯一前驱和唯一后继的数据结构,只有 首元素无前驱,只有尾元素无后继; 非线性结构:每个元素前驱唯一、后继元素不唯一(树); 每个元素前驱、后继元素均不唯一(图);
Lecture 1 – Introduction to Data Type and Data Structure 作业: P126 2