数 2-线性表.ppt

Size: px
Start display at page:

Download "数 2-线性表.ppt"

Transcription

1 数据结构华中科技大学计算机学院

2 第二章 2.1 线性表的定义 线性表 线性表的逻辑结构 1. 线性表 : 由 n(n 0) 个数据元素 (a 1,a 2,..., a n ) 构成的有限序列 记作 : L=(a 1,a 2,...,a n ) a 1 首元素 a n 尾元素 2. 表的长度 ( 表长 ) 线性表中数据元素的数目 3. 空表 不含数据元素的线性表 2

3 线性表举例 : 例 1. 字母表 L1=(A,B,C,...,Z) 表长 26 例 2. 姓名表 L2=( 李明, 陈小平, 王林, 周爱玲 ) 表长 4 例 3. 图书登记表 序号 书 名 作 者 单价 ( 元 ) 数量 ( 册 ) 1 程序设计语言 李 明 数据结构 陈小平 n DOS 使用手册 周爱玲 表长 n 3

4 线性表的特征 : 对于 L=(a 1,a 2,...,a i-1,a i,a i+1,...,a n ) 1.a i-1 在 a i 之前, 称 a i-1 是 a i 的直接前驱, (1<i n) 2.a i+1 在 ai 之后, 称 a i+1 是 a i 的直接后继 (1 i<n) 3.a 1 没有前驱 4.a n 没有后继 5.a i (1<i<n) 有且仅有一个直接前驱和一个直接后继 4

5 2.1.2 抽象数据类型线性表的定义 ADT List { 数据对象 :D={a i a i ElemSet,i=1,2,,...n,n>=0} 数据关系 :R1={<a i-1,a i > a i-1,a i D,i=2,,...n} 基本操作 : 1.IniList(&L) // 构造空表 L 2.ListLength(L) 3.GetElem(L,i,&e) // 求表 L 的长度 // 取元素 ai, 由 e 返回 ai 4.PriorElem(L,ce,&pre_e) // 求 ce 的前驱, 由 pre_e 返回 5.ListInsert(&L,i,e) 6.ListDelete(&L,i,&e) 7.ListEmpty (L)... }ADT List // 在元素 ai 之前插入新元素 e // 删除第 i 个元素 // 判断 L 是否为空表 5

6 说明 1. 删除 L 中第 i 个数据元素 (1<=i<=n), 记作 : ListDelete(&L,i,&e) L=(a 1,a 2,...,a i-1,a i,a i+1,...,a n ) 指定序号 i, 删除 a i L=(a 1,a 2,...,a i-1,a i+1,...,a n ) 2. 指定元素值 x, 删除表 L 中的值为 x 的元素, 记作 : DeleteElem(&L,x) 3. 在元素 ai 之前插入新元素 e(1<=i<=n+1) L=(a 1,a 2,...,a i-1,a i,...,a n ) 插入 e L=(a 1,a 2,...,a i-1,e, a i,...,a n ) 4. 查找 ---- 确定元素值 ( 或数据项的值 ) 为 e 的元素 给定 : L=(a 1,a 2,...,a i,...,a n ) 和元素 e 若有一个 a i =e, 则称 查找成功,i=1,2,...,n 否则, 称 查找失败 6

7 5. 排序 ---- 按元素值或某个数据项值的递增 ( 或递减 ) 次序重新排列表中各元素的位置 例. 排序前 : L=(90,60,80,10,20,30) 排序后 : L=(10,20,30,60,80,90) L 变为有序表 6. 将表 La 和表 Lb 合并为表 Lc 例. 设有序表 : La=(2,14,20,45,80) Lb=(8,10,19,20,22,85,90) 合并为表 Lc=(2,8,10,14,19,20,20,22,45,80,85,90) 7. 将表 La 复制为表 Lb La= (2,14,20,45,80) Lb= (2,14,20,45,80) 7

8 可利用现有基本操作组成更复杂的操作 : 例 : 将线性表 Lb 中的, 且不在线性表 La 数据元素合并到线性表 La 中 void union(list &La, List &Lb) { La_len=ListLength (La); // 求线性表 La 的长度 Lb_len=ListLength (Lb); // 求线性表 Lb 的长度 for (i=1; i<= Lb_len; i++) { GetElem(Lb, i, e); // 取 Lb 的的第 i 个数据元素赋给 e // 即依次取出 Lb 中的所有元素 if (!LocateElem(La, e, equal)) // 判断 e 在 La 中是否存在 ListInsert(La, ++La_len, e); // 不存在则插入 } } 8

9 2.2 线性表的顺序表示 ( 顺序存储结构 ) 顺序分配 将线性表中的数据元素依次存放到计算机存储器中一组地址连续的存储单元中, 这种分配方式称为顺序分配或顺序映像 由此得到的存储结构称为顺序存储结构或向量 ( 一维数组 ) 例. 线性表 :a=(30,40,10,55,24,80,66) 内存状态 a 1 a 2 a 3 a 4 a 5 a 6 a 7 C 语言中静态一维数组的定义 : int a[11]; // 两种存储方式 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

10 (a 1,a 2,...a n ) 顺序存储结构的一般形式 序号存储状态存储地址 1 b 2 b+l i n maxleng a 1 a 2... a i... a n // // // b+(i-1)*l b+(n-1)*l 自由区 b+(maxleng-1)*l 其中 : b---- 表的首地址 / 基地址 / 元素 a1 的地址 l----1 个数据元素所占存储单元的数目 maxleng---- 最大长度, 为某个常数 10

11 2.2.2 线性表顺序结构在 C 语言中的定义 例 1. 分别定义元素所占空间 表长 尾元素的位置 或 : #define maxleng 100 { ElemType la[maxleng+1];// 下标 :0,1,,maxleng } int length; int last; // 当前长度 //an 的位置 a1 a2... ai... an 0 1 i 1 n-1 n maxleng last=length-1=n-1 a1 a2... ai... an i n maxleng last=length=n 结论 : last 和 length 二取一 11

12 线性表顺序结构在 C 语言中的定义 ( 静态分配 ) 例 2. 元素所占空间和表长合并为 C 语言的一个结构类型 : #define maxleng 100 typedef struct { ElemType elem[maxleng];// 下标 :0,1,...,maxleng-1 int length; // 表长 } SqList; SqList La;... 其中 :typedef--- 别名定义,SqList---- 结构类型名 La---- 结构类型变量名 La.length--- 表长 La.elem[0]----a1 La.elem[La.length-1]---an 12

13 讨论 : q 顺序表的存储结构是一维数组, 如果插入若干元素 后元素总个数超过数组定义的长度怎么办? 采用动态分配的一维数组 q 在 C 语言中如何实现动态数组? 利用 C 中几个库函数 ( 在 <stdlib.h> 中 ): sizeof(x):c 中的单目操作符, 计算变量 x 的长度 ( 字节数 ); malloc(m) : 开辟 m 字节长度的地址空间, 并返回这段空间的 首地址 ; realloc(*p, newsize) : 新开一片大小为 newsize 的连续空间, 并把以 *p 为首址的原空间数据都复制进去 free(p) : 释放指针 p 所指变量的存储空间 13

14 线性表顺序结构在 C 语言中的定义 ( 动态分配 ) #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct { ElemType *elem;// 存储空间基地址 int length; // 表长 ( 表中有多少个元素 ) int listsize; } SqList; SqList Lb; // 当前分配的存储容量 //( 以 sizeof(elemtype) 为单位 其中 :typedef--- 别名定义,SqList---- 结构类型名 Lb---- 结构类型变量名 Lb.length--- 表长 Lb.elem[0]----a1 Lb.elem[Lb.length-1]---a n 14

15 2.2.3 顺序存储结构的寻址公式 a1 a2... ai... an // // // i= i... n 地址 = b b+1*l b+(i-1)l b+(n-1)l 假设 : 线性表的首地址为 b, 每个数据元素占 l 个存储单元, 则表中任意元素 ai(1 i n) 的存储地址是 : LOC(i)=LOC(1)+(i-1)*l =b+(i-1)*l 例 : 假设 b=1024,l=4,i=35 LOC(i)=b+(i-1)*l =1024+(35-1)*4 = *4 =1160 (1 i n) 15

16 Status InitList_Sq( SqList &L) { // 构造一个空的线性表 L, 利用动态顺序存储结构 L.elem= (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if (! L.elem) exit(overflow); // 存储分配失败 L.length = 0; L.listsize= LIST_INIT_SIZE; return OK; //?? } // InitList_Sq 算法时间复杂度 : O(1) 16

17 2.2.4 插入算法实现举例 设 L.elem[0..maxleng-1] 中有 legth 个元素, 在 L.elem[i-1] 之前插入新元素 e,1<=i<=length 例.i=3,e=6,length=6 插入 6 之前 : // // // ,30,20,8 依次后移一个位置插入 6 之后 : // //

18 在线性表 L=(a 1,a 2,...,a i-1,a i,a i+1,...,a n ) 中的第 i 个元素前插入元素 x a 1 a 2 a i a i+1 a n /// ///. /// 0 1 i-1 i n-1... n maxleng-1 a 1 a 2 a i a i a i+1 a n ///. /// 0 1 i-1 i n-1 n maxleng-1 移动元素下标范围 : x i-1 ~ n-1 或 i-1 ~ L.length-1 18

19 算法 1:( 用指针指向被操作的线性表, 静态分配 ): // 设 L.elem[0..maxleng-1] 中有 length 个元素, 在 L.elem[i-1] 之前插入新元素 e,(1<=i<=length+1) int Insert1(SqList *L,int i,elemtype e) { if (i<1 i>l->length+1) return ERROR //i 值不合法 if (L->length>=maxleng) return OVERFLOW // 溢出?? for (j=l->length-1;j>=i-1;j--;) L->elem[j+1]=L->elem[j]; // 向后移动元素 L->elem[i-1]=e; // 插入新元素 L->length++; // 长度变量增 1 return OK // 插入成功 } 19

20 算法 2:( 用引用参数表示被操作的线性表, 静态分配 ) : // 设 L.elem[0..maxleng-1] 中有 length 个元素, 在 L.elem[i-1] 之前插入新元素 e,(1<=i<=length+1) Status Insert2(SqList &L,int i,elemtype e) { if (i<1 i>l.length+1) return ERROR //i 值不合法 if (L.length>=maxleng) return OVERFLOW // 溢出 for (j=l.length-1;j>=i-1;j--;) L.elem[j+1]=L.elem[j]; L.elem[i-1]=e; // 向后移动元素 // 插入新元素 L.length++; // 长度变量增 1 return OK // 插入成功 } 20

21 算法 2.4 ( 动态分配线性表空间, 用引用参数表示被操作的线性表 ) int ListInsert_Sq(SqList &L,int i, ElemType e) {int j; if (i<1 i>l.length+1) //i 的合法取值为 1 至 n+1 return ERROR; if (L.length>=L.listsize) /* 溢出时扩充 */ { ElemType *newbase; newbase=(elemtype *) realloc(l.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType)); if (newbase==null) return OVERFLOW; // 扩充失败 L.elem=newbase; L.listsize+=LISTINCREMENT; } 21

22 // 向后移动元素, 空出第 i 个元素的分量 elem[i-1] for(j=l.length-1;j>=i-1;j--) L.elem[j+1]=L.elem[j]; L.elem[i-1]=e; /* 新元素插入 */ L.length++; /* 线性表长度加 1*/ return OK; } 22

23 2.2.5 插入操作移动元素次数的分析 在 (a 1,a 2,...,a i,...a n ) 中 a i 之前插入新元素 e ( 1<=i<=n+1 ) a 1 a 2.. a i.. a n 0 1 i-1 n-1 当插入点为 : 1 2 i n-1 n n+1 需移动元素个数 : n n-1 n-i 假定 p i 是在各位置插入元素的概率, 且 p 1 =p 2 =...=p n =p n+1 =1/(n+1), 则插入一个元素时移动元素的平均值是 : n+1 E is = p i (n-i+1)=1/(n+1)*[n+(n-1) ]=n/2 i=1 23

24 2.2.6 删除操作及移动元素次数的分析 线性表操作 ListDelete(&L, i, &e) 的实现 : 分析 : 删除元素时, 线性表的逻辑结构发生什么变化? 24

25 (a 1,, a i-1, a i, a i+1,, a n ) 改变为 (a 1,, a i-1, a i+1,, a n ) <a i-1, a i >, <a i, a i+1 > <a i-1, a i+1 > a 1 a 2 a i-1 a i a i+1 a n a 1 a 2 a i-1 a i+1 a n 表的长度减少 25

26 Status ListDelete_Sq (SqList &L, int i, ElemType &e) { if ((i < 1) (i > L.length)) return ERROR; p = &(L.elem[i-1]); e = *p; q = L.elem+L.length-1; // 删除位置不合法 // p 为被删除元素的位置 // 被删除元素的值赋给 e // 表尾元素的位置 for (++p; p <= q; ++p) *(p-1) = *p; // 被删除元素之后的元素左移元素左移 --L.length; // 表长减 1 return OK; } // ListDelete_Sq 26

27 a 1 a 2 a i-1 a i a i+1 a n // // 0 1 i-2 i-1 i n-1 a 1 a 2 a i-1 a i+1 a n // // // 当 i= i... n 移动元素个数 = n-1 n-2... n-i... 0 假定 q i 是在各位置删除元素的概率, 且 : q 1 =q 2 =...=q n =1/n 则删除一个元素时移动元素的平均值是 : E = q ( n E dl = 1 n ( n i) n i= 1 = n 1 2 算法时间复杂度为 : O(n) dl n i= 1 i i) 27

28 2.2.7 顺序存储结构的评价 1. 优点 : (1) 是一种随机存取结构, 存取任何元素的时间是一个常数, 速度快 ; (2) 结构简单, 逻辑上相邻的元素在物理上也是相邻的 ; (3) 不使用指针, 节省存储空间 2. 缺点 : (1) 插入和删除元素要移动大量元素, 消耗大量时间 ; (2) 需要一个连续的存储空间 ; (3) 插入元素可能发生 溢出 ; (4) 自由区中的存储空间不能被其它数据占用 ( 共享 ) 内存 : 2k 占用 5k 占用 3k 28

29 2.3 线性表的链式存储结构 链式存储结构特点 : 其结点在存储器中的位置是随意的, 即逻辑上相邻的数据元素在物理上不一定相邻 如何实现? 通过指针指针来实现! 让每个存储结点都包含两部分 : 数据域和指针域链式存储有关的术语 : 结点 : 数据元素的存储映像 由数据域和指针域两部分组成 链表 : n 个结点由指针链组成一个链表 它是线性表的链式存储映像, 称为线性表的链式存储结构 单链表 双链表 多链表 循环链表 29

30 2.3.1 单链表 1. 单链表的一般形式 : (1) 不带表头结点的单链表 : data next head --- a1 --- a an 头指针 首结点 尾结点 其中 :data 称为数据域,next 称为指针域 / 链域 当 head==null, 为空表 ; 否则为非空表 30

31 (2) 带表头结点的单链表 : a. 非空表 : data next head --- /// -- a an 头指针表头结点首结点尾结点 b. 空表 : data next head --- /// 头指针表头结点 其中 :head 指向表头结点, head->data 不放元素, head->next 指向首结点 a1, 当 head->next==null, 为空表 ; 否则为非空表 31

32 头指针 头结点和首元结点的区别 示意图如下 : a 1 head a 2 info a n ^ 头指针头结点首元结点 头指针是指向链表中第一个结点 ( 或为头结点 或为首元结点 ) 的指针 头结点是在链表的首元结点之前附设的一个结点 ; 数据域内只放空表标志和表长等信息, 它不计入表长度 首元结点是指链表中存储线性表第一个数据元素 a 1 的结点 32

33 讨论 1. 在链表中设置头结点有什么好处? 头结点即在链表的首元结点之前附设的一个结点, 该结点的数据域可以为空, 也可存放表长度表长度等附加信息, 其作用是为了对链表进行操作时, 可以对空表 非空表的情况以及对首元结点进行统一处理, 编程更方便 讨论 2. 如何表示空表? 无头结点时, 当头指针的值为空时表示空表 ; 有头结点时, 当头结点的指针域为空时表示空表 头指针 头指针 头结点 ^ ^ 无头结点 有头结点 头结点不计入链表长度! 33

34 线性表的逻辑结构 : 线性表 由 n(n 0) 个数据元素 (a 1,a 2,..., a n ) 构成的有限序列 记作 : L=(a 1,a 2,...,a n ) 线性表顺序存储结构 ( 静态分配 ) #define maxleng 100 typedef struct { ElemType elem[maxleng];// 下标 :0,1,...,maxleng-1 int length; // 表长 } SqList; SqList L; 34

35 线性表顺序存储结构 ( 动态分配 ) #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct { ElemType *elem;// 存储空间基地址 int length; // 表长 ( 表中有多少个元素 ) int listsize; } SqList; SqList L; a1 // 当前分配的存储容量 //( 以 sizeof(elemtype) 为单位 a2... ai... an // // // LOC(i)=LOC(1)+(i-1)*l =b+(i-1)*l (1 i n) Status ListInsert_Sq(SqList &L,int i, ElemType e) Status ListDelete_Sq (SqList &L, int i, ElemType &e) 顺序表 ( 占用连续存储空间 ) 是一种随机存取结构, 存取速度快 ; 但插入与删除元素要移动大量数据元素, 时间复杂性为 O(n). 35

36 线性表的链式存储结构 (1) 不带表头结点的单链表 : data next head --- a1 --- a an 头指针 首结点 尾结点 (2) 带表头结点的单链表 : a. 非空表 : data next head --- /// -- a an 头指针表头结点首结点尾结点 b. 空表 : data next head --- /// 头指针表头结点 注意 : 头指针 头结点和首元结点的区别 36

37 2 单链表的结点结构 例 1 C 语言的 结构 类型 : struct Lnode { ElemType data; //data 为抽象元素类型 struct Lnode *next; //next 为指针类型 }; 指向结点的指针变量 head,p,q 说明 : struct Lnode *head,*p,*q; 例 2 用 typedef 定义指针类型 : typedef struct Lnode { ElemType data; //data 为抽象元素类型 struct Lnode *next; //next 为指针类型 } Lnode, *Linklist; 指针变量 head,p,q 的说明 : Linklist head,p,q; 37

38 3. 单链表操作和算法举例 : (1) 生成单链表例 1 输入一列整数, 以 0 为结束标志, 生成 先进先出 单链表 若输入 :1,2,3,4,5 则生成 : head - /// ^ #define LENG sizeof(struct Lnode) // 结点所占的字节数 struct Lnode // 定义结点类型 { int data; //data 为整型, 数据域 struct Lnode *next; //next 为指针类型, 指针域 }; 38

39 输入 1: head 初始化 :head //// ^ //// tail 2 p tail ^ 输入 2: head 3 tail 每次输入新元素后 : 1 生成新结点 ;p=malloc( 结点大小 );p->data=e; p->next=null; 2 添加到表尾 ;tail->next=p; 3 设置新表尾 tail=p; //// 1 2 p 1 2 ^ 39

40 先进先出表的产生过程 (1,2,3,4,5,0): tail tail tail tail tail tail head /// 头指针头结点 p p p p p ^ head=malloc(sizeof(struct Lnode)) tail=head p=malloc(sizeof(structlnode)) tail->next=p tail=p p=malloc(sizeof(structlnode)) tail->next=p tail=p tail->next=null; 40

41 算法 : 生成 先进先出 单链表 ( 链式队列 ) struct Lnode *creat1( ) { struct Lnode *head,*tail,*p; // 变量说明 int e; head=(struct Lnode *)malloc(leng); // 生成表头结点 tail=head; // 尾指针指向表头 scanf( %d,&e); // 输入第一个数 while (e!=0) // 不为 0 { p=(struct Lnode *)malloc(leng);// 生成新结点 p->data=e; // 装入输入的元素 e tail->next=p; // 新结点链接到表尾 tail=p; // 尾指针指向新结点 scanf( %d,&e); // 再输入一个数 } tail->next=null; // 尾结点的 next 置为空指针 return head; // 返回头指针 } 41

42 例 2 生成 后进先出 单链表 ( 链式栈 ) 输入 :1,2,3,4,0 生成 : head - /// p 1 3 初始化 : head //// ^ 输入 1: head //// 1 ^ 输入 2: head //// p 1 ^ 2 每次输入新元素后 : 1 生成新结点 ; p=malloc( 结点大小 ); p->data=e; 2 新结点指针指向 首元素 ;p->next=head->next; 3 新结点作为首元素 : head->next=p; 42

43 例 2 生成 后进先出 单链表 ( 链式栈 ) 算法 : struct Lnode *creat2( ) // 生成 后进先出 单链表 { struct Lnode *head,*p; head=(struct Lnode *)malloc(leng); // 生成表头结点 head->next=null; // 置为空表 scanf( %d,&e); // 输入第一个数 while (e!=0) // 不为 0 { p=(struct Lnode *)malloc(leng);// 生成新结点 p->data=e; // 输入数送新结点的 data p->next=head->next; // 新结点指针指向原首结点 head->next=p; // 表头结点的指针指向新结点 scanf( %d,&e); // 再输入一个数 } return head; // 返回头指针 } 43

44 单链表的建立和输出 (Slides from Prof. Liu Yu s Lecture) 例 : 用单链表结构来存放 26 个英文字母组成的线性表 (a,b,c,,z), 请写出 C 语言程序 实现思路 : 先开辟头指针, 然后陆续为每个结点开辟存储 空间并及时赋值, 后继结点的地址要提前送给前面的指针 先挖 坑, 后种 萝卜! 44

45 将全局变量及函数提前说明 : #include<stdio.h stdio.h> #include<stdlib.h stdlib.h> typedef struct Lnode{ char data; struct Lnode *next; }Lnode; Lnode *p,*q,*head; int n ; int m=sizeof(lnode); // 一般需要 3 个指针变量 // 数据元素的个数 /* 结构类型定义好之后, 每个变量的长度就固定了,m 求一次即可 */ 45

46 void build( ) { inti; head=(lnode*)malloc(m); p=head; for( i=1; i<26; i++) 特别容易忘记!! //m=sizeof(node) 前面已求出 // 因尾结点要特殊处理, 故 i 26 { p->data=i+ a -1; // 无头结点, 首结点值为字符 a p->next=(lnode*)malloc(m); // 为后继结点 挖坑! p=p->next;} p->data=i+ a -1; // 字母链表的生成 要一个个慢慢链入 // 让指针变量 P 指向后一个结点 // 最后一个元素要单独处理 p->next=null ;} // 单链表尾结点的指针域要置空! 46

47 void display() /* 字母链表的输出 */ {p=head; while (p) sum=0; // 当指针不空时循环, 仅限于无头结点的情况 {printf("%c",p->data); } } p=p->next; // 让指针不断 顺藤摸瓜 sum++; 讨论 : 要统计链表中数据元素的个数, 该如何改写? 47

48 单链表的修改 ( 或读取 ) 思路 : 要修改第 i 个数据元素, 必须从头指针起一直找到该结点的指针 p, 然后才能执行 p->data=new_value 读取第 i 个数据元素的操作函数可写为 : Status GetElem_L(LinkList L, int i, ElemType &e) // 带头结点的链表 L {p=l->next; j=1; while(p&&j<i){p=p->next; ++j;} if(!p j>i ) return ERROR; // if i<1? p->data =e; // 若是读取则为 :e=p->data; return OK;}//GetElem_L 缺点 : 寻找单链表中第 i 个元素, 只能从头指针开始逐一查询 ( 顺藤摸瓜 ), 无法随机存取 48

49 (2) 插入一个结点 例 1: 在已知 p 指针指向的结点后插入一个元素 x a b p x f 执行 : f=(struct Lnode *)malloc(leng); f->data=x; f->next=p->next; p->next=f; // 生成 // 装入元素 x // 新结点指向 p 的后继 // 新结点成为 p 的后继 思考 : 最后两条语句能互换么? 49

50 例 2: 在已知 p 指针指向的结点前插入一个元素 x q p a b 执行 : x f f=(struct Lnode *)malloc(leng); f->data=x; f->next=p; q->next=f; // 生成 // 装入元素 x // 新结点成为 p 的前趋 // 新结点成为 p 的前趋结点的后继 50

51 例 3: 输入一列整数, 以 0 为结束标志, 生成递增有序单链表 ( 不包括 0) 递增有序单链表的两种形式 : head ^ head ///// ^ 51

52 分析 : 假定有一个无表头结点的递增排序的链表, 插入一个 新结点, 使其仍然递增 f 7 基本步骤 : 1 定位 ; 2 准备新结点 ; 3 修改指针 head ^ f->next=p; q ^ qp pq p q->next=f; p, q 可能为 NULL 1 (p, q 同时空 ) 空表插入 ; 2 ( 仅 p 为空 ) 尾部插入 ; 3 ( 仅 q 为空 ) 首部插入 ; 52

53 e 为新元素值 插入算法 NULLŁq headłp p!=null&& e>p->data 真 płq p->nextłp 1 空表插入 ; 2 尾部插入 ; 3 首部插入 ; 4 一般插入 假 q==null 真 new(f) ełf->data NULLŁf->next 真 假 p==null 返回 head 假 q==null 真 不带头结点算法 fłhead fłq->next płf->next fłq->next fłhead płf->next 假 53

54 算法 1: 在不带头结点的递增有序单链表中插入元素 e ( 不包括 0) struct Lnode * creat3_1(struct Lnode *head,int e) { q=null; p=head; //q,p 扫描, 查找插入位置 while (p && e>p->data) // 未扫描完, 且 e 大于当前结点 { q=p; p=p->next;} //q,p 后移, 查下一个位置 f=(struct Lnode *)malloc(leng); // 生成新结点 f->data=e; // 装入元素 e if (p==null){ f->next=null; if (q==null) //(1) 对空表的插入 head=f; else q->next=f;} //(2) 作为最后一个结点插入 else if (q==null) //(3) 作为第一个结点插入 {f->next=p; head=f;} else {f->next=p; q->next=f;} //(4) 一般情况插入新结点 return head; } 54

55 e 为新元素值 插入算法 NULLŁq headłp new(f) ełf->data NULLŁf->next p!=null&& e>p->data 假 1 真 q==null 2 假 真 płq fłhead fłq->next p->nextłp płf->next 1 作为第一元素或首元素插入 ; 2 一般插入或作为尾元素插入 ; 返回 head 55

56 main() { struct Lnode *head; head=null; scanf( %d,&e); while (e!=0) { head=creat3_1(head,e); scanf( %d,&e); } } // 定义头指针 // 置为空表 // 输入整数 // 不为 0, 未结束 // 插入递增有序单链表 // 输入整数 56

57 分析 : 假定有一个有表头结点的递增排序的链表, 插入一个 新结点, 使其仍然递增 f 7 基本步骤 : 1 定位 ; 2 准备新结点 ; 3 修改指针 head /// f->next=p; q qp pq p q->next=f; q 不可能为空 57

58 带头结点算法 插入算法 : Begin headłq head->nextłp p!=null&& e>p->data 真 płq p->nextłp 假 1 定位 new(f) ełf->data fłq->next płf->next 2 准备新结点位 3 修改指针 return 58

59 算法 2: 生成带头结点的递增有序单链表 ( 不包括 0) void creat3_2(struct Lnode *head,int e) { q=head; p=head->next; //q,p 扫描, 查找插入位置 } while (p && e>p->data) // 未扫描完, 且 e 大于当前结点 { q=p; p=p->next; //q,p 后移, 查下一个位置 } f=(struct Lnode *)malloc(leng); // 生成新结点 f->data=e; // 装入元素 e f->next=p; q->next=f; // 插入新结点 59

60 main() { head=(struct Lnode *)malloc(leng);// 生成表头结点 head->next=null; // 置为空表 scanf( %d,&e); // 输入整数 while (e!=0) // 不为 0, 未结束 { creat3_2(head,e); // 插入递增有序单链表 head scanf( %d,&e); // 输入整数 } } 60

61 算法 3: 在单链表的指定位置 ( 结点 i 之前 ) 插入新元素 输入 : 头指针 L 位置 i 数据元素 e 输出 : 成功返回 OK, 否则 ERROR p p p p L /// a 1 a 2 a i-1 a i a n ^ 执行 :p=l 当 p 不为空执行 :p=p->next 定位到第 i-1 个结点 i-1 次 当 i<1 或 p 为空时插入点错 否则新结点加到 p 指向结点之后 61

62 算法 3 程序 : Status ListInsert_L(Linklist &L,int i, ElemType e) {p=l; j=1; while (p && j<i) { p=p->next; //p 后移, 指向下一个位置 j++;} if (i<1 p==null) // 插入点错误 return ERROR; f=(linklist) malloc(leng); // 生成新结点 f->data=e; // 装入元素 e f->next=p->next; p->next=f; // 插入新结点 return OK; }//ListInsert_L 62

63 (3) 在单链表中删除一个结点 q p data next next A B C q p 删除 B 1 执行 :q->next=p->next; //A 的 next 域 =C 的地址 (B 的 next 域 ) A B C 执行 :free(p);// 释放 p 所指向的结点空间 q p A C

64 算法 1: 在带表头结点的单链表中删除元素值为 e 的结点 int Delete1(Linklist head, ElemType e) { struct Lnode *q,*p; q=head; p=head->next; //q,p 扫描 while (p && p->data!=e) // 查找元素为 e 的结点 { q=p; // 记住前一个结点 p=p->next; // 查找下一个结点 } if (p) // 有元素为 e 的结点 { q->next=p->next; // 删除该结点 free(p); // 释放结点所占的空间 return YES; } else return NO; // 没有删除结点 } 64

65 算法 2(2.9): 在单链表中删除指定位置的元素 输入 : 头指针 L 位置 i 输出 : 成功返回 OK, 否则 ERROR p p p p L /// a 1 a 2 a i-1 a i a n ^ 执行 :p=l 当 p->next 不为空 执行 :p=p->next 定位到第 i-1 个结点 i-1 次 当 i<1 或 p->next 为空时删除点错 否则 p 指向结点的后继跳过原后继 65

66 Status ListDelete_L(LinkListL, int i, ElemType &e) { // 删除以 L 为头指针 ( 带头结点 ) 的单链表中第 i 个结点 p = L; j = 0; while (p->next && j < i-1) { p = p->next; ++j; } // 寻找第 i 个结点, 并令 p 指向其前趋 if (!(p->next) j > i-1) return ERROR; // 删除位置不合理 q = p->next; p->next = q->next; // 删除并释放结点 e = q->data; free(q); return OK; } // ListDelete_L 算法 2.9 的时间复杂度为 : O(ListLength(L)) 66

67 (4) 将两个有序单链表 La 和 Lb 合并为有序单链表 Lc: ( 该算法利用原单链表的结点 ) pa pa : La /// 2 5 pc pc pc Lb /// pb pb La ///

68 算法设计 : 算法主要包括搜索 比较 插入三个操作 : 搜索 : 需要设立三个指针来指向 La Lb 和 Lc 链表 ; 比较 : 比较 La 和 Lb 表中结点数据的大小 ; 插入 : 将 La 和 Lb 表中数据较小的结点插入新链表 Lc 请注意链表的特点, 仅改变指针便可实现数据的移动, 即 数据不动, 指针动 68

69 算法实现 :P31 算法 2.12 Void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc) { // 已知单链线性表 La 和 Lb 的元素按值非递减排列 free(lb); } //MergeList_L 归并为 Lc 后也按值非递减排列 pa=la->next; pb=lb->next; Lc=pc=La; while(pa&&pb) // 用 La 的头结点作为 Lc 的头结点 // 将 pa pb 结点按大小依次插入 Lc 中 { if (pa->data<=pb->data) {pc->next=pa; pc=pa; pa=pa->next;} else {pc->next=pb; pc=pb; pb=pb->next} } pc->next = pa? pa: pb ; // 插入非空表的剩余段 // 释放 Lb 的头结点 69

70 4. 静态链表 ---- 用一维数组描述的链表 head - // 1 A 2 B 3 C 4 D 5 E 头指针表头结点首结点尾结点 若某种高级语言没有指针 类型, 能否实现链式存储 结构和运算? 如何实现? 序号 data cur 0 // 1 1 A 2 2 B 3 3 C 4 4 D 5 5 E 0 6 // // 7 // // 指示域或 游标 70

71 动态链表样式 : 静态链表样式 : 数据 数据 数据 指针 指针 指针 数据 数据 数据 数据 数据 指示 指示 指示 指示 指示 数组中每个元素都至少有两个分量, 属于结构型数组 常用于无指针类型的高级语言中 静态单链表的类型定义如下 : #define MAXSIZE 1000 // 预分配最大的元素个数 ( 连续空间 ) typedef struct { ElemType data ; // 数据域 int cur ; // 指示域 }component, SLinkList[MAXSIZE] ; // 一维结构型数组 71

72 一线性表 S = ( ZHAO, QIAN, SUN, LI, ZHOU, WU ), 用静态链表如何表示? 教材 P32 例题 i data 头结点 ZHAO LI cur 说明 1: 假设 S 为 SLinkList 型变量, 则 S[MAXSIZE] 为一个静态链表 ; S[0].cur 则表示第 1 个结点在数组中的位置 QIAN WU ZHOU SUN 说明 2: 如果数组的第 i 个分量表示链表的第 k 个结点, 则 : S[i].data 表示第 k 个结点的数据 ; S[i].cur 表示第 k+1 个结点 ( 即 k 的直接后继 ) 的位置

73 说明 : 静态链表的插入与删除操作与普通链表一样, 不需要移动元素, 只需修改指示器就可以了 例如 : 在线性表 S = ( ZHAO, QIAN, SUN, LI, ZHOU, WU ) 的 QIAN, SUN 之间插入新元素 LIU, 可以这样实现 : i data 头结点 ZHAO LI QIAN WU ZHOU SUN cur LIU 6 Step1: 将 QIAN 的游标值存入 LIU 的游标中 : S[7].cur = S[3].cur; Step2: 将 QIAN 的游标换为新元素 LIU 的下标 : S[3].cur = 7 73

74 线性链表小结 线性链表是线性表的一种链式存储结构 线性链表的特点 1 通过保存直接后继元素的存储位置来表示数据元素之间的逻辑关系 ; 2 插入删除操作通过修改结点的指针实现 ; 3 不能随机存取元素 74

75 2.3.2 循环链表 : 最后一个结点的指针域的指针又指回头结点的链表 1. 一般形式 (1) 带表头结点的非空循环单链表 H - // a 1 a 2... a n 头指针表头结点首结点尾结点 有 :H->next H, H NULL (2) 带表头结点的空循环单链表 H - // 头指针 表头结点 有 :H->next==H, H NULL 和单链表的差别仅在于 : 判别链表中最后一个结点的条件不再 是 后继是否为空, 而是 后继是否为头结点 75

76 2. 只设尾指针的循环链表 (1) 非空表 /// a 1 a 2... a n tail 表头结点首结点尾结点尾指针 有 : tail 指向表尾结点 tail->data==an tail->next 指向表头结点 (2) 空表 tail->next->next 指向首结点 tail->next->next->data== a1 /// tail 有 :tail->next==tail 表头结点 尾指针 76

77 例 : 两循环链表首尾相连 head1 head2 ///// ///// 时间复杂度 : O(m+n) p2 tail1 tail2 (1) p2=tail2->next; (2) tail2->next=tail1->next; ///// ///// (3) tail1->next=p2->next; (4) free(p2); 时间复杂度 : O(1) 77

78 3. 循环链表算法举例例. 求以 head 为头指针的循环单链表的长度, 并依次输出结点的值 算法如下 : int length(struct Lnode *head) { int leng=0; // 长度变量初值为 0 struct Lnode *p; p=head->next; //p 指向首结点 while (p!=head) //p 未移回到表头结点 { printf( %d,p->data);// 输出 leng++; p=p->next;} return leng; } // 计数 //p 移向下一结点 // 返回长度值 78

79 2.3.4 双向链表 1. 双向链表的结点结构 : prior data next 前驱 a(i-1) ai 后继 a(i+1) 双向链表的存储结构类型定义如下 : typedef struct DuLNode{ ElemType data; // 数据域 structdulnode *prior; // 前驱指针域 structdulnode *next; // 后继指针域 } DuLNode, *DuLinkList ; 79

80 2. 双向链表的一般形式 (1) 非空表 prior data next L // a1 a2... an 表头结点首结点尾结点 有 :L 为头指针,L 指向表头结点,L->next 指向首结点 L->next->data==a1 L->prior 指向尾结点, L->prior->data==an L->next->prior== L->prior->next==NULL (2) 空表 L // 表头结点 有 :L->next==L->prior==NULL 80

81 3. 双向循环链表 (1) 空表 L // 有 :L->next==L->prior==L 表头结点 (2) 非空表 prior data next L // a1... an 表头结点 p 尾结点 设 p 指向 a1, 有 : p->next 指向 a2, p->next->prior 指向 a1, 所以,p==p->next->prior 同理 :p==p->prior->next 81

82 (3) 已知指针 p 指向结点 B, 删除 B p A B C 执行 : p->prior->next=p->next; // 结点 A 的 next 指向结点 C p->next->prior=p->prior; // 结点 C 的 prior 指向结点 A free(p); // 释放结点 B 占有的空间 82

83 (4). 已知指针 p 指向结点 C, 在 A C 之间插入结点 B p A C f B 执行 : 1 f->prior=p->prior; 2 f->next=p; 3 p->prior->next=f; 4 p->prior=f; // 结点 B 的 prior 指向结点 A // 结点 B 的 next 指向结点 C // 结点 A 的 next 指向结点 B // 结点 C 的 prior 指向结点 B 83

84 用单链表实现线性表的操作时, 存在的问题 : 1. 单链表的表长是一个隐含的值 ; 2. 在单链表的最后一个元素之后插入元素时, 需遍历整个链表 ; 3. 在链表中, 元素的 位序 概念淡化, 结点的 位置 概念加强 改进链表的设置 :Page 增加 表长 表尾指针 和 当前位置的 指针 三个数据域 ; 2. 将基本操作中的 位序 i 改变为 指针 p 84

85 线性表的两种存储结构的比较 具体要求 基于空间 顺序表 链表 适于线性表长适于当线性表长度变化大, 难以估度变化不大, 计其存储规模时采用 易于事先确定其大小时采用 基于时间 由于顺序表是一种随机存储结构, 当线性表的操作主要是查找时, 宜采用 链表中对任何位置进行插入和删除都只需修改指针, 所以这类操作为主的线性表宜采用链表做存储结构 若插入和删除主要发生在表的首尾两端, 则宜采用尾指针表示的单循环链表 85

86 讨论如下问题 : q 线性表的两种存储结构各有哪些优缺点? q 对于线性表的两种存储结构, 如果有 n 个表同时并存, 且处理过程中各表的长度会动态发生变化, 表的总数也可能自动改变, 在此情况下应选用哪种存储表示? 为什么? q 若表的总数基本稳定, 且很少插入和删除, 但要求以最快速度存取表中元素, 这时应采用哪种存储表示? 为什么? q 顺序表与链表进行插入操作时, 有什么不同? 86

87 2.4 一元多项式的表示与相加 一元多项式 2 p ( x) = p + p x + p x n p n x n 在计算机中, 可以用一个线性表来表示 : P = (p 0, p 1,,p n ) 但是对于如下形式的多项式, 上述表示方法是否合适? S(x) = 1 + 3x x

88 一般情况下的一元稀疏多项式可写成 P n (x) = p 1 x e1 + p 2 x e2 + + p m x em 其中 :p i 是指数为 e i 的项的非零系数, 0 e 1 < e 2 < < e m = n 可以下列线性表表示 : ((p 1, e 1 ), (p 2, e 2 ),, (p m,e m ) ) 例如 : P 999 (x) = 7x 3-2x 12-8x 999 可用线性表表示为 ( (7, 3), (-2, 12), (-8, 999) ) 88

89 抽象数据类型一元多项式的定义如下 : ADT Polynomial { 数据对象 : D={ a i a i TermSet, i=1,2,...,m, m 0 TermSet 中的每个元素包含一个表示系数的实数和表示指数的整数 } 数据关系 : R1={ <a i-1,a i > a i-1,a i D, i=2,...,n, 且 a i-1 中的指数值 <a i 中的指数值 } 89

90 基本操作 : CreatPolyn( &P, m ) 操作结果 : 输入 m 项的系数和指数, 建立一元多项式 P DestroyPolyn( &P ) 初始条件 : 一元多项式 P 已存在 操作结果 : 销毁一元多项式 P PrintPolyn( &P ) 初始条件 : 一元多项式 P 已存在 操作结果 : 打印输出一元多项式 P 90

91 PolynLength( P ) 初始条件 : 一元多项式 P 已存在 操作结果 : 返回一元多项式 P 中的项数 AddPolyn( &Pa, &Pb) 初始条件 : 一元多项式 Pa 和 Pb 已存在 操作结果 : 完成多项式相加运算, 即 : Pa = Pa+Pb, 并销毁一元多项式 Pb SubtractPolyn( &Pa, &Pb) } ADT Polynomial 91

92 多项式的链表表示 A 12 (x)=1+3x 5-7x 12 coef expn next pa A // ^ B 17 (x)=6+3x 3-3x 5 +12x 17 pb B // ^ C(x)=A(x)+B(x) pc C // ^ 多项式相加与两个有序单链表的归并有何不同? 92

93 C(x)=A(x)+B(x) 的算法步骤 : 对比参考第 43 页的算法 pa pb 分别指向首元素结点, 产生 C(x) 的空链表,pc 指向头结点 ; 2. pa 不为空并且 pb 不为空, 重复下列操作 : 2-1 pa->expn 等于 pb->expn (a)pa->coef+pb->coef 不等于零 : 产生新结点, 添加到 pc 后, pc 指向新结点 pa pb 后移 (b)pa->coef+pb->coef 等于零 : pa pb 后移 2-2 pa->expn 小于 pb->expn: 由 pa 产生新结点, 添加到 pc 后, pc 指向新结点, pa 后移 2-3 pa->expn 大于 pb->expn: 由 pb 产生新结点, 添加到 pc 后, pc 指向新结点, pb 后移 3. pa 为空, 取 pb 剩余结点产生新结点 ; pb 为空, 取 pa 剩余结点产生新结点, 依次添加到 pc 的后面 93

94 运算效率分析 : (1) 系数相加 0 加法次数 min(m, n) 其中 m 和 n 分别表示表 A(x) 和表 B(x) 的结点数 (2) 指数比较极端情况是表 A 和表 B 没有一项指数相同, 比较次数最多为 m+n-1 (3) 新结点的创建极端情况是产生 m + n 个新结点合计时间复杂度为 O(m+n) 94

95 本章小结 1. 线性结构 ( 包括表 栈 队 数组 ) 的定义和特点 : 仅一个首 尾结点, 其余元素仅一个直接前驱和一个直接后继 2. 线性表 逻辑结构 : 一对一 或 1:1 存储结构 : 顺序 链式运算 : 修改 插入 删除 [ 查找和排序另述 ] 3. 顺序存储 特征 : 逻辑上相邻, 物理上也相邻 ; 优点 : 随机查找修改快 O(1) 缺点 : 插入 删除慢 O(n) 改进方案 : 链表存储结构 95

96 4. 链式存储 特征 : 逻辑上相邻, 物理上未必相邻 ; 优点 : 插入 删除快 O(1) 缺点 : 随机查找修改慢 O(n) 5. 几种特殊链表的特点 : 静态链表的特点 : 不用指针也能实现链式存储和运算 循环链表的特点 : 从任一结点出发均可找到表中其他结点 双向链表的特点 : 可方便找到任一结点的前驱 96

97 经典问题 : 例 1: 试用 C 或类 C 语言编写一个高效算法, 将一循环单链表就地逆置 ( 微软亚洲研究院招聘笔试题 ) 操作前 :(a 1, a 2, a i-1, a i, a i+1,, a n ) 操作后 :( a n, a i+1, a i, a i-1,, a 2, a 1 ) 分析 : 要想让 a n 指向 a n-1, a 2 指向 a 1, 一般有两种算法 : 1 替换法 : 扫描 a 1 a n, 将每个 a i-1 的指针域送入 a i+1 的指针域 2 插入法 : 扫描 a 1 a n, 思路 : 后继变前驱 将每个 a i 插入到链表首部即可 head a 1 ^ 思路 : 头部变尾部 a 2 97

98 替换法的核心语句 : 插入法的核心语句 : q=head; p=head->next; // 有头结点 while(p!=head) // 循环单链表 { r=p->next; p->next=q; // 前驱变后继 q=p; p=r; } // 准备处理下一结点 head->next=q; // 以 a n 为首 p=head->next; // 有头结点 if(p!=head){q=p->next; p->next =head;p=q}; // 处理 a 1 while(p!=head) // 循环单链表 { q=p ->next // 保存原后继 p ->next= head->next; head->next=p; p=q;} // 准备处理下一结点 q p r head a 1 head a i-1 a i a i+1 请上机验证并分析效率! p a 2 q 98

99 例 2: 试用 C 或类 C 语言编写一高效算法, 将一顺序存储的线性表 ( 设元素均为整型量 ) 中所有零元素向表尾集中, 其他元素则顺序向表头方向集中 华为公司招聘面试题 (a 1, a 2, a i-1, a i, a i+1,, a n ) 常见做法 : 1 从前往后扫描, 见到 0 元素则与尾部非 0 元素互换 ; 2 从后往前扫描, 见到 0 元素则后面元素统统前移 ; 3 从前往后扫描, 见到 0 元素先计数, 再将后续的一个非 0 元素前移, 全部扫完后再把后续部分 ( 长度为 0 元素的个数 ) 清 0 99

100 解 : void SortA(SqList &L) { int i=0, zerosum =0; if(l.length= =0) return(0); else { for( i=1; i<=l.length; i++) } // 空表则结束 {if (L.elem[i]<>0) L.elem[i-zerosum]= L.elem[i]; else zerosum++; } for( i= L.length-zerosum+1; i<=l.length; i++) L.elem[i]=0; // 表的后部补 0 return(ok); }// SortA 若表完全不空, 也要移动 n 次? 100

101 若考虑表完全非空的情况, 则程序要变长很多 解 : void SortA(SqList&L) { int i=0, zerosum =0; } if(l.length= =0) return(0); for ( i=1; i<=l.length; i++) {if (L.elem[i]<>0) // 空表则不执行 if(zerosum!=0) L.elem[i-zerosum]= L.elem[i]; else zerosum++ }; // 适当移动非零元素, 是零则增加计数 for ( i= L.length-zerosum+1; i<=l.length; i++) L.elem[i]=0; // 表的后部补 0 return(ok); 101

102 讨论 1: 已知带头结点的单链表, 其头指针为 head, 在不改 变链表的情况下, 设计一高效算法输出链表中倒数第 k 个结 点数据域的值 ( 用 C,C++ 或 JAVA 语言实现 ) 2009 年统考题 a 1 head a 2 a n ^ 讨论 : 如何设计算法? 讨论 2: 一个长度为 n(n 1) 的升序序列 L, 处在第 n/2 的数称为 L 的中位数 两个序列的中位数是含它们所有元素的升序序列的中位数 现有两个等长的升序序列 A 和 B, 试设计一时空高效算法求出两个升序序列 A 和 B 的中位数 ( 用 C,C++ 或 JAVA 语言实现 ) 2011 年统考题例 :(11,13,15,17,19) (2,4,6,8,20) 这两个序列的中位数是

103 习 题 一 填空题 (1) 链表中逻辑上相邻的元素的物理位置 相连 (2) 在单链表中除首结点外, 任意结点的存储位置都由 结点中的指针指示 (3) 线性表的元素长度为 4, 在顺序存储结构下 LOC(a i )=2000, 则 LOC(a i+1 )= (4) 线性表的元素长度为 L, 在顺序存储结构下 Loc(a i )=Loc(a 1 )+ 103

104 (5) 已带表头结点的单链表 L, 指针 p 指向 L 链表中的一个结点, 指针 q 是指向 L 链表外的一个结点, 则 : v 1 在指针 p 所指结点后插入 q 所指结点的语句序列是 ; v2 在指针 p 所指结点前插入 q 所指结点的语句序列是 ; v3 将 q 所指结点插入在链表首结点的语句序列是 ; v4 将 q 所指结点插入在链表尾结点的语句序列是 104

105 (6) 已知带表头结点的单链表 L, 指针 p 指向 L 链表中的一个结点 ( 非首结点. 非尾结点 ), 则 : 1 删除指针 p 所指结点的直接后继结点的语句是 ; 2 删除指针 p 所指结点的直接前驱结点的语句序列是 ; 3 删除指针 p 所指结点的语句序列是 ; 4 删除首结点的语句序列是 ; 5 删除尾结点的语句序列是 105

106 (7) 已知指针 p 指向双向链表中的一个结点 ( 非首结点, 非尾结点 ), 则 : 1 将结点 s 插入在指针 p 所指结点的直接后继位置的语句是 ; 2 将结点 s 插入在指针 p 所指结点的直接前驱位置的语句是 ; 3 删除指针 p 所指结点的直接后继结点的语句序列是 ; 4 删除指针 p 所指结点的直接前驱结点的语句序列是 ; 5 删除指针 p 所指结点的语句序列是 106

107 (8) 在下图所示的链表中, 若在指针 p 所指的结点之后插入数据字段相继为 a 和 b 的两个结点, 则可用下列两个语句实现该操作, 它们依次是 和 107

108 二 单选题 (1) 下列说法正确的是 : A. 线性表的逻辑顺序和存储顺序总是一致的 B. 线性表的链式存储结构中, 内存中可用的存储单元可以是连续的, 也可以不连续 C. 线性表的顺序存储结构优于链式存储结构 D. 每种数据结构都具有插入 删除和查找三种基本操作 (2) 线性表中哪些元素只有一个直接前驱和一个直接后继 A. 首元素 B. 尾元素 C. 中间的元素 D. 所有的元素 108

109 v (3) 指针 p 指向带头结点循环单链表的首结点的条件是 : A.p==L B.p->next==L C.L->next==p D.p->next==NULL v (4) 指针 p 指向双向循环链表的尾结点的条件是 : A.p==L B.p==NULL C.p->prior==L D.p->next==L 109

110 本章作业 选做 : 课外编程练习 先建立一个整型数的单链表, 然后统计单链表中数据元素为 0 的个数 110

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 - 2线性表.ppt [兼容模式]

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

More information

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

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

More information

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

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

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

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

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

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

Microsoft PowerPoint - ds_2.ppt

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

More information

没有幻灯片标题

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

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

download.kaoyan.com_2006ÄêÌì½ò¹¤Òµ´óѧ¸ß¼¶ÓïÑÔ³ÌÐòÉè¼Æ£¨409£©¿¼ÑÐÊÔÌâ

download.kaoyan.com_2006ÄêÌì½ò¹¤Òµ´óѧ¸ß¼¶ÓïÑÔ³ÌÐòÉè¼Æ£¨409£©¿¼ÑÐÊÔÌâ 考生注意 : 本试卷共七大题, 满分 150 分 考试时间为 3 小时 ; 所有答案均写在答题纸上 ( 注明题号 ), 在此答题一律无效无效 一 选择题 ( 本题共 20 小题, 每小题 2 分, 满分 40 分 ) 1 char ch 1 2 A 0

More information

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

Microsoft PowerPoint - Slides03_第二章 线性表.ppt [兼容模式] 第二章线性表 定义 基本操作 实现 顺序存储 链式存储 应用 多项式 线性表 (Linear List) 定义 线性表是 n ( 0) 个数据元素的有限序列, 记作 (a 1, a 2,, a n ) a i 是表中数据元素,n 是表长度 假定 : 各元素的数据类型相同 原则上 : 线性表中, 表元素的数据类型可以不相同 采用的存储表示可能会对元素的数据类型有限制 特点 除第一个元素外, 其他每一个元素有一个且仅有一个直接前驱

More information

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

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

More information

Microsoft PowerPoint - 08 指针

Microsoft PowerPoint - 08 指针 能源与动力工程学院 目录 指针 (Pointer) 陈 斌 第二节指针数组第四节指针的应用 Fortran 90/95 引入了指针的概念 指针变量的声明方法为 : Fortran 语言中, 一个指针变量可以动态地指向某个数据对象, 或者说, 对此数据对象起了一个别名 Fortran 中的指针与 C 语言中的指针并不相同, 因为它并不代表一个变量在内部存储单元中的地址, 而是代表这个变量的别名, 实质上它相当于

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

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

PowerPoint Presentation

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

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

2 线性表 Linear List 姜玻 2 线性表 Linear List 2.1 线性表的定义和 基本操作 2.2 线性表的实现 线性表的顺序存储 姜玻 教育科学与技术学院 数字媒体技术系 单链表 带表头结点的单链表 单循环链表 双向链

2 线性表 Linear List 姜玻 2 线性表 Linear List 2.1 线性表的定义和 基本操作 2.2 线性表的实现 线性表的顺序存储 姜玻 教育科学与技术学院 数字媒体技术系 单链表 带表头结点的单链表 单循环链表 双向链 2.1 线性表的定义和 基本操作 2.的实现 教育科学与技术学院 数字媒体技术系 前情提要 程序 = 数据结构 + 算法何为数据结构, 相关的术语逻辑结构存储结构运算抽象数据类型 (Abstract Data Type,ADT) C++ 定义和实现何为算法, 其特点和设计要求算法的时间复杂度 ( 大 O 表示 ) 算法的空间复杂度 2.的实现 前情提要 ADT Stack{ 数据 : 0 个或多个元素的序列

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语言程序设计》教材习题参考答案

《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

Microsoft Word - 第2章 线性表.docx

Microsoft Word - 第2章 线性表.docx 第 2 章线性表 学习目标 u 理解顺序表的逻辑与存储原理, 并能实现简单顺序表 u 掌握单链表的逻辑与存储原理, 并能实现单链表 u 掌握双向链表的逻辑与存储原理 u 掌握循环链表的逻辑与存储原理线性表, 顾名思义是像线一样性质的表, 它的用处多不胜数, 是最常用且最简单的一种数据结构, 例如, 一串英文字母 一队手拉手的小朋友 一份学生成绩单等等都可以用线性表表示 线性表的存储结构有顺序存储结构和链式存储结构两种,

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

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

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

More information

untitled

untitled 1 DBF (READDBF.C)... 1 2 (filetest.c)...2 3 (mousetes.c)...3 4 (painttes.c)...5 5 (dirtest.c)...9 6 (list.c)...9 1 dbf (readdbf.c) /* dbf */ #include int rf,k,reclen,addr,*p1; long brec,erec,i,j,recnum,*p2;

More information

试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期 " 开放本科 " 期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默

试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期  开放本科  期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默 试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期 " 开放本科 " 期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默认扩展名为 ( ) A. cpp B. c C. exe D. obj 2. 设 x 和 y 均为逻辑值,

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 线性表 Ⅱ 链表 常见考点 链表存储结构的特点 单链表结构及其算法设计方法 双链表结构及其算法设计方法 循环链表结构及其算法设计方法 灵活运用链表解决一些较复杂的应用问题 3.1 线性表链式存储结构概述 3.1.1 要点归纳 1. 链表线性表的链式存储结构称为链表, 通常线性表中的一个元素用一个链表结点存放, 每个结点增加指针域表示结点之间的逻辑关系 有一个指针域的链表称为单链表 ( 通常结点指针指向其后继结点

More information

串 零个或多个字符组成的有限序列 将元素类型限制为字符线性表 具有相同类型的数据元素的有限序列 将元素类型扩充为线性表 ( 多维 ) 数组 线性表中的数据元素可以是线性表 2

串 零个或多个字符组成的有限序列 将元素类型限制为字符线性表 具有相同类型的数据元素的有限序列 将元素类型扩充为线性表 ( 多维 ) 数组 线性表中的数据元素可以是线性表 2 Array Zibin Zheng( 郑子彬 ) School of Data and Computer Science, SYSU http://www.inpluslab.com 课程主页 :http://inpluslab.sysu.edu.cn/dsa2016/ 串 零个或多个字符组成的有限序列 将元素类型限制为字符线性表 具有相同类型的数据元素的有限序列 将元素类型扩充为线性表 ( 多维

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

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

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

More information

PowerPoint Presentation

PowerPoint Presentation 数据结构与数据库 课号 21050301 2012 秋 第五章数组 5.1 数组的定义 5.2 数组的顺序表示和实现 5.3 矩阵的压缩存储 5.3.1 特殊矩阵 5.3.2 稀疏矩阵 2 同理, 一个 n 维数组类型可以定义为其数据元素为 n-1 维数组类型的一维数组类型 数组一旦被定义, 它的维数和维界就不再改变 因此, 除了结构的初始化和销毁之外, 数组只有存取元素和修改元素值的操作 抽象数据类型数组的定义参见教材

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

untitled

untitled CHAPTER 02 2 CHAPTER 2-1 2-4 2-2 2-5 2-3 2-6 2-1 2-1-1 2-2 02 int A[3] = {10, 20, 30; A[0] 10 A[1] 20 A[2] 30 int *pa[3], A[3]; C 3 pa pa[0]pa[1]pa[2] 3 A A[0]A[1]A[2] 3 A A[0] A + i A[i] A + i &A[i]*(A

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

试卷代号 : 座位号 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

试卷代号 : 座位号 CD 中央广播电视大学 学年度第二学期 " 开放本科 " 期末考试 数据结构 ( 本 ) 试题 I 题号 - - I 二 l 三 l 四 l 总 分 分数 I I I I I I 2009 年 7 月 得分 评卷人 I I I 一

试卷代号 : 座位号 CD 中央广播电视大学 学年度第二学期  开放本科  期末考试 数据结构 ( 本 ) 试题 I 题号 - - I 二 l 三 l 四 l 总 分 分数 I I I I I I 2009 年 7 月 得分 评卷人 I I I 一 试卷代号 : 1 2 5 2 座位号 CD 中央广播电视大学 2 0 0 8-2 0 0 9 学年度第二学期 " 开放本科 " 期末考试 数据结构 ( 本 ) 试题 I 题号 - - I 二 l 三 l 四 l 总 分 分数 I I I I I I 2009 年 7 月 得分 评卷人 I I I 一 单项选择题 ( 每小题 2 分如 崎盯扫, 共 3t 3ω O 1. 针对线性表, 在存储后如果最常用的操作是取第

More information

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc 2 5 8 11 0 13 1. 13 2. 15 3. 18 1 23 1. 23 2. 26 3. 28 2 36 1. 36 2. 39 3. 42 4. 44 5. 49 6. 51 3 57 1. 57 2. 60 3. 64 4. 66 5. 70 6. 75 7. 83 8. 85 9. 88 10. 98 11. 103 12. 108 13. 112 4 115 1. 115 2.

More information

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

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 TEMPLATE 1 Template 描述 使用模板函数求最大值 使用如下 main 函数对程序进行测试 int main() { double a, b; cin >> a >> b; cout c >> d; cout

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 - 1绪论.ppt [兼容模式]

Microsoft PowerPoint - 1绪论.ppt [兼容模式] 1 绪论 董洪伟 http://hwdong.com 主要内容 什么是数据结构 定义 内容 基本术语 数据 : 数据对象 数据元素 数据项 数据结构 : 逻辑结构 物理结构 抽象数据类型 定义 表示 算法和算法分析 算法的概念 算法复杂度 什么是数据结构 程序 = 数据结构 + 算法 Pascal 之父,Niklaus Wirth 数据结构 : 问题的数学模型 数据表示 算法 : 处理问题的策略 数据处理

More information

湖北工业大学二 八年招收硕士学位研究生试卷 则从顶点 A 出发进行深度优先遍历可以得到的序列是 : A.ACEDBFG B.ACDGFBE C.AECDBGF D.ABDGFEC 9 在对 n 个元素的序列进行排序时, 堆排序所需要的附加存储空间是 ( ) A. O(log 2 n) B. O(1)

湖北工业大学二 八年招收硕士学位研究生试卷 则从顶点 A 出发进行深度优先遍历可以得到的序列是 : A.ACEDBFG B.ACDGFBE C.AECDBGF D.ABDGFEC 9 在对 n 个元素的序列进行排序时, 堆排序所需要的附加存储空间是 ( ) A. O(log 2 n) B. O(1) 二 八年招收硕士学位研究生试卷 试卷代号 917 试卷名称数据结构 1 试题内容不得超过画线范围, 试题必须打印, 图表清晰, 标注准确 2 考生请注意 : 答案一律做在答题纸上, 做在试卷上一律无效 一 单项选择题 ( 在每小题列出四个供选择的答案 A B C D 中, 选一个正确的答案, 将其代号填在答卷纸相应题号后的下横线上, 每小题 2 分, 共 20 分 ) 1 以下术语与数据的存储结构无关的是(

More information

试卷代号 :1075 座位号 rn 国家开放大学 ( 中央广播电视大学 )2015 年秋季学期 " 开放本科 " 期末考试 c+ 十语言程序设计试题 2016 年 1 月 t 问一 Urr-f 斗 士 1 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new

试卷代号 :1075 座位号 rn 国家开放大学 ( 中央广播电视大学 )2015 年秋季学期  开放本科  期末考试 c+ 十语言程序设计试题 2016 年 1 月 t 问一 Urr-f 斗 士 1 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new 试卷代号 :1075 座位号 rn 国家开放大学 ( 中央广播电视大学 )2015 年秋季学期 " 开放本科 " 期末考试 c+ 十语言程序设计试题 2016 年 1 月 t 问一 Urr-f 斗 士 1 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. long 2. 在每个 C 十 + 程序中都必须包含有这样一个函数, 该函数的函数名为 ) A.main

More information

chap10.ppt

chap10.ppt 第十章 结构体与共用体 10.1 结构体 10.2 链表 10.3 共用体 10.4 枚举类型 10.5 用 typedef 定义类型 10.1 结构体 数组, 相同类型的数据集合 foxpro 中, 记录 : 字段有序集 ( 各字段类型可不相同 ) 换句话说, 将不同类型的数据组合成一个整体 结构体 (structure): 一种归在同一名之下的各种变量的组合称结构体的各个成员 一 定义 : 格式

More information

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

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

More information

Microsoft Word - CSJ05.doc

Microsoft Word - CSJ05.doc 第 5 章 设备信息管理 本章设计并实现一个设备信息管理程序, 要求实现设备入库登记 设备领用与归还登记 设备维修登记 设备变更登记等功能模块, 并且每一个模块还需要划分多个子模块 ; 使用各自不同的结构体来储存不同的登记信息 ; 使用链表来实现各种登记信息的添加 删除 查询 修改等操作 ; 使用文件来保存数据, 以便下次运行时可以自动将数据从文件读取到链表中 5.1 实践目的 (1) 掌握带头节点的链表的工作原理和处理方式

More information

C/C++语言 - 运算符、表达式和语句

C/C++语言 - 运算符、表达式和语句 C/C++ Table of contents 1. 2. 3. 4. C C++ 5. 6. 7. 1 i // shoe1.c: # include # define ADJUST 7. 64 # define SCALE 0. 325 int main ( void ) { double shoe, foot ; shoe = 9. 0; foot = SCALE * shoe

More information

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

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

More information

四 读算法 ( 每题 7 分, 共 14 分 ) 1. (1) 查询链表的尾结点 (2) 将第一个结点链接到链表的尾部, 作为新的尾结点 (3) 返回的线性表为 (a 2,a 3,,a n,a 1 ) 2. 递归地后序遍历链式存储的二叉树 五 法填空 ( 每空 2 分, 共 8 分 ) true B

四 读算法 ( 每题 7 分, 共 14 分 ) 1. (1) 查询链表的尾结点 (2) 将第一个结点链接到链表的尾部, 作为新的尾结点 (3) 返回的线性表为 (a 2,a 3,,a n,a 1 ) 2. 递归地后序遍历链式存储的二叉树 五 法填空 ( 每空 2 分, 共 8 分 ) true B 数据结构试卷 ( 一 ) 参考答案 一 选择题 ( 每题 2 分, 共 20 分 ) 1.A 2.D 3.D 4.C 5.C 6.D 7.D 8.C 9.D 10.A 二 填空题 ( 每空 1 分, 共 26 分 ) 1. 正确性 易读性 强壮性 高效率 2. O(n) 3. 9 3 3 4. -1 3 4 X * + 2 Y * 3 / - 5. 2n n-1 n+1 6. e 2e 7. 有向无回路

More information

第5章修改稿

第5章修改稿 (Programming Language), ok,, if then else,(), ()() 5.0 5.0.0, (Variable Declaration) var x : T x, T, x,,,, var x : T P = x, x' : T P P, () var x:t P,,, yz, var x : int x:=2. y := x+z = x, x' : int x' =2

More information

试卷代号 ~1075 座位号 E 口 国家开放大学 ( 中央广播电视大学 )20]5 年秋季学期 " 开放本科 " 期末考试 C 十十语言程序设计 试题 同二二十斗 2016 年 1 月 巴叫一 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. l

试卷代号 ~1075 座位号 E 口 国家开放大学 ( 中央广播电视大学 )20]5 年秋季学期  开放本科  期末考试 C 十十语言程序设计 试题 同二二十斗 2016 年 1 月 巴叫一 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. l 试卷代号 ~1075 座位号 E 口 国家开放大学 ( 中央广播电视大学 )20]5 年秋季学期 " 开放本科 " 期末考试 C 十十语言程序设计 试题 同二二十斗 2016 年 1 月 巴叫一 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. long 2. 在每个 c++ 程序中都必须包含有这样一个函数, 该函数的函数名为 ( ) A. main

More information

网C试题(08上).doc

网C试题(08上).doc 学习中心 姓名 学号 西安电子科技大学网络与继续教育学院 高级语言程序设计 (C) 全真试题 ( 闭卷 90 分钟 ) 题号一二三总分 题分 60 20 20 得分 一 单项选择题 ( 每小题 3 分, 共 60 分 ) 1.C 语言程序的基本单位是 A) 程序行 B) 语句 C) 函数 D) 字符 2. 下列四组选项中, 均是不合法的用户标识符的选项是 A)A B)getc C)include D)while

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

2018 年天津城建大学攻读硕士学位研究生入学考试试题 (A) 卷 考试科目代码 :825 考试科目名称工程信息技术 招生专业 : 建筑与土木工程

2018 年天津城建大学攻读硕士学位研究生入学考试试题 (A) 卷 考试科目代码 :825 考试科目名称工程信息技术 招生专业 : 建筑与土木工程 一 单项选择题 ( 本题共 20 小题, 每题 2 分, 共 40 分 ) 1. 计算机所处理的数据一般具有某种内在联系, 这是指 ( ) A. 数据和数据之间存在某种联系 B. 数据项和数据项之间存在某种联系 C. 元素内部具有某种结构 D. 元素和元素之间存在某种联系 2. 在计算机中表示数据时, 数据的物理地址和逻辑地址相同并且连续, 称其为 ( ) A. 链式存储结构 B. 顺序存储结构 C.

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

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

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

酒 神 (长篇小说)

酒  神  (长篇小说) 酒 神 ( 长 篇 小 说 ) 作 家 : 莫 言 第 一 章 一 省 人 民 检 察 院 的 特 级 侦 察 员 丁 钩 儿 搭 乘 一 辆 拉 煤 的 解 放 牌 卡 车 到 市 郊 的 罗 山 煤 矿 进 行 一 项 特 别 调 查 沿 途, 由 于 激 烈 思 索, 脑 袋 膨 胀, 那 顶 本 来 晃 晃 荡 荡 的 五 十 八 号 咖 啡 色 鸭 舌 帽 竟 紧 紧 地 箍 住 了 头

More information

(Microsoft Word - 136\260g\270\364\252\272\267s\256Q.doc)

(Microsoft Word - 136\260g\270\364\252\272\267s\256Q.doc) 日 本 短 篇 推 理 小 說 136 迷 路 的 新 娘 赤 川 次 郎 著 序 曲 啊 頭 好 痛 啊! 太 柔 軟 的 枕 頭 在 頭 痛 時 刻, 反 而 產 生 了 反 效 果 按 了 太 陽 穴 好 幾 次, 又 緊 閉 著 眼 晴 再 張 開 重 複 地 做 了 這 些 動 作 之 後, 終 於 稍 微 減 輕 了 頭 痛 在 這 種 情 況 之 下 醒 來, 已 經 不 是 第 一

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

PowerPoint 演示文稿

PowerPoint 演示文稿 STC 单片机复杂数据结构 主讲 : 何宾 Email:hebin@mail.buct.edu.cn 2016.03 结构类型定义的格式为 : struct 结构名 } 其中 : 结构元素列表 结构 -- 结构类型的定义 结构元素列表为不同数据类型的列表 结构 -- 结构类型的定义 例 16-1 结构体的声明例子 struct student char name[30]; char gender;

More information

<4D6963726F736F667420576F7264202D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

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

More information

<4D F736F F D20CAFDBEDDBDE1B9B9C8ABCAE9>

<4D F736F F D20CAFDBEDDBDE1B9B9C8ABCAE9> 科学出版社职教技术出版中心 www.aboo 普通高等教育 十二五 重点规划教材 计算机系列 中国科学院教材建设专家委员会 十二五 规划教材 数据结构 江家宝程勇主编史春联王廷蔚副主编杨勃蔡敏 参编汪世陈伟 北京 内容简介本书由浅入深, 以浅显易懂的文字与图表对各种数据结构和算法的设计进行分析, 对问题的解决方法做了详尽的剖析, 并且辅之以相应的 C 程序代码, 从而增进读者对数据结构的理解与掌握

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

幻灯片 1

幻灯片 1 C Programming Language Lecture 12 Chengwei Zhang ( 张成伟 ) Tian Xia ( 夏天 ) Dept. of Electronics and Information Eng. Huazhong University of Science and Technology Feb. 2014 Lecture 12 Chapter 11: C Data

More information

2015年计算机二级(C语言)模拟试题及答案(三)

2015年计算机二级(C语言)模拟试题及答案(三) 2016 年计算机二级 (C 语言 ) 模拟试题及答案 (3) 1.( A ) 是构成 C 语言程序的基本单位 A 函数 B 过程 C 子程序 D 子例程 2.C 语言程序从 ( C ) 开始执行 A 程序中第一条可执行语句 B 程序中第一个函数 C 程序中的 main 函数 D 包含文件中的第一个函数 3 以下说法中正确的是( C ) A C 语言程序总是从第一个定义的函数开始执行 B 在 C 语言程序中,

More information

新・解きながら学ぶC言語

新・解きながら学ぶC言語 330!... 67!=... 42 "... 215 " "... 6, 77, 222 #define... 114, 194 #include... 145 %... 21 %... 21 %%... 21 %f... 26 %ld... 162 %lf... 26 %lu... 162 %o... 180 %p... 248 %s... 223, 224 %u... 162 %x... 180

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

新版 明解C言語入門編

新版 明解C言語入門編 328, 4, 110, 189, 103, 11... 318. 274 6 ; 10 ; 5? 48 & & 228! 61!= 42 ^= 66 _ 82 /= 66 /* 3 / 19 ~ 164 OR 53 OR 164 = 66 ( ) 115 ( ) 31 ^ OR 164 [] 89, 241 [] 324 + + 4, 19, 241 + + 22 ++ 67 ++ 73 += 66

More information

求出所有的正整数 n 使得 20n + 2 能整除 2003n n 20n n n 20n n 求所有的正整数对 (x, y), 满足 x y = y x y (x, y) x y = y x y. (x, y) x y =

求出所有的正整数 n 使得 20n + 2 能整除 2003n n 20n n n 20n n 求所有的正整数对 (x, y), 满足 x y = y x y (x, y) x y = y x y. (x, y) x y = 求出所有的正整数 n 使得 20n + 2 能整除 2003n + 2002 n 20n + 2 2003n + 2002 n 20n + 2 2003n + 2002 求所有的正整数对 (x, y), 满足 x y = y x y (x, y) x y = y x y. (x, y) x y = y x y 对于任意正整数 n, 记 n 的所有正约数组成的集合为 S n 证明 : S n 中至多有一半元素的个位数为

More information

没有幻灯片标题

没有幻灯片标题 第 12 讲 结构与链表 (Part I) 周水庚 2015 年 12 月 3 日 提要 结构类型和结构变量 结构数组 结构形参和结构指针形参 链表及其应用 联合 位域 枚举 类型定义 程序设计 -2015 年秋 2 提要 结构类型和结构变量 结构数组 结构形参和结构指针形参 链表及其应用 联合 位域 枚举 类型定义 程序设计 -2015 年秋 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

数 5-数组.ppt

数 5-数组.ppt 数据结构 华中科技大学 计算机学院 第五章 数组和广义表 线性表 :L=(a,a 2,...,a n ),a i 是同类型的元素, i n 数组 : A= (a,a 2,...,a n ) 若 a i 是同类型的元素,A 是一维数组, i n 若 a i 是同类型的定长线性表,A 是多维数组, i n 广义表 :Ls= (a,a 2,...,a n ) a i 可以是同类型的元素或广义表, i n

More information

没有幻灯片标题

没有幻灯片标题 第 12 讲 结构与链表 (Part I) 周水庚 2017 年 12 月 7 日 提要 结构类型和结构变量 结构数组 结构形参和结构指针形参 链表及其应用 联合 位域 枚举 类型定义 提要 结构类型和结构变量 结构数组 结构形参和结构指针形参 链表及其应用 联合 位域 枚举 类型定义 为什么要结构类型? 我们要描述一个班级的同学的信息, 每个同学的信息包括 : 学号 姓名 性别 年龄 成绩 家庭地址

More information

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

试卷代号 : 座位号 中央广播电视大学 学年度第二学期  开放本科  期末考试 数据结构试题 2012 年 7 月 题号一四五总分一一 分数 得分 评卷人 - 单项选择题, 在括号内填写所选择的标号 { 每小题 2 分, 共 1 8 分 ) 1. 下面算法 试卷代号 : 1 0 1 0 座位号 中央广播电视大学 2 0 11 2012 学年度第二学期 " 开放本科 " 期末考试 数据结构试题 2012 年 7 月 题号一四五总分一一 分数 得分 评卷人 - 单项选择题, 在括号内填写所选择的标号 { 每小题 2 分, 共 1 8 分 ) 1. 下面算法的时间复杂度为 ( ) int f( unsigned int n) { if(n= =0 II n=

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 第 1 章程序设计和 C 语言 1.1 什么是计算机程序 1.2 什么是计算机语言 1.3 C 语言的发展及其特点 1.4 最简单的 C 语言程序 1.5 运行 C 程序的步骤与方法 1.6 程序设计的任务 1.1 什么是计算机程序 程序 : 一组计算机能识别和执行的指令 只要让计算机执行这个程序, 计算机就会自动地 有条不紊地进行工作 计算机的一切操作都是由程序控制的, 离开程序, 计算机将一事无成

More information

Microsoft PowerPoint - 0 C复习.ppt [兼容模式]

Microsoft PowerPoint - 0 C复习.ppt [兼容模式] C 复习 董洪伟 http://hwdong.com 1 程序 : 数据 + 处理 ( 运算 ) 数据 : 变量和常量 int i = 3; 初始化式 变量需要定义 : 类型变量名 ; 类型变量名 = 变量或常量 ; doule pi, r=3.45,area; char var= A ; 类型变量 1, 变量 2, 变量 3; 同时定义多个变量, 逗号隔开 2 运算 : 用运算符对数据进行处理 y

More information

Microsoft PowerPoint

Microsoft PowerPoint 书面作业讲解 TC 第 10.1 节练习 4 5 6 TC 第 10.2 节练习 1 2 3 6 TC 第 10.3 节练习 4 5 TC 第 10.4 节练习 2 3 4 TC 第 10 章问题 3 1 TC 第 10.11 节练习 4 Rewrite ENQUEUE to detect overflow. if (Q[Q.tail]!= null) 对不对? if (Q.tail == Q.head)

More information

Microsoft PowerPoint - C语言课件-9-结构体.pptx

Microsoft PowerPoint - C语言课件-9-结构体.pptx 第九章结构体 郎大鹏 第九章结构体 9.1 结构体类型的声明方法 9.2 结构体类型变量的定义与使用 9.3 结构体数组 9.4 编程举例 9.5 习题 9.1 结构体类型的声明方法 结构体声明的语法形式如下 : struct 结构体标识符 成员变量列表 ; }; 例如, 为了描述班级 ( 假设仅仅包括班级编号 专业 人数等信息 ), 可以声明如下的结构体类型 struct Class char Code[10];

More information

Microsoft PowerPoint - 01_Introduction.ppt

Microsoft PowerPoint - 01_Introduction.ppt Hello, World C 程序设计语言 第 1 章章观其大略 孙志岗 sun@hit.edu.cn http://sunner.cn prf("hello,, world\n"); 超级无敌考考你 : 如何把 hello 和 world 分别打印在两行? 2004-12-19 A Tutorial Introduction 2 hello.c 打印华氏温度与摄氏温度对照表 计算公式 : C=(5/9)(

More information

C/C++ - 函数

C/C++ - 函数 C/C++ Table of contents 1. 2. 3. & 4. 5. 1 2 3 # include # define SIZE 50 int main ( void ) { float list [ SIZE ]; readlist (list, SIZE ); sort (list, SIZE ); average (list, SIZE ); bargragh

More information

第二章 实验环境

第二章 实验环境 第三章上机实验 本实验教材将按照教材的章节去安排实验, 教师在使用过程中可以根据需要适当 挑选其中的若干实验要求学生上机完成 对于每个实验, 本实验教材都给出了一些代 码示例, 供学生参考 3.1 实验一 : 线性表 3.1.1 背景知识 线性表是一直简单且应用广泛的基本结构, 其特点是在非空的数据元素集合中, 元素之间在逻辑上存在一个序偶关系, 除了第一个元素外, 都有一个直接前驱, 除了最后一个元素外,

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

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

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

数据结构

数据结构 数据结构 主讲 : 张昱马建辉 yuzhang@ustc.edu.cn, 3603804 jianhui@ustc.edu.cn, 3602824 关于课程教学与考核 课程简介 内容简介 数据结构 + 算法 = 程序 数据结构 : 问题的数学模型 线性结构 : 线性表 栈 队列 串 非线性结构 : 树 图 算法 : 求解问题的策略 查找 排序 在 算法基础 课程中介绍 学时 :60/40 学分 :4

More information

2006年国家公务员招录考试行测真题(A)

2006年国家公务员招录考试行测真题(A) 2006 年 中 央 国 家 机 关 公 务 员 录 用 考 试 行 政 职 业 能 力 测 验 (A) 真 题 说 明 这 项 测 验 共 有 五 个 部 分,135 道 题, 总 时 限 为 120 分 钟 各 部 分 不 分 别 计 时, 但 都 给 出 了 参 考 时 限, 供 你 参 考 以 分 配 时 间 请 在 机 读 答 题 卡 上 严 格 按 照 要 求 填 写 好 自 己 的 姓

More information

untitled

untitled 1-1 1-2 1-3 1-4 1-5 1-6 1-7 1-8 1-1-1 C int main(void){ int x,y,z; int sum=0; double avg=0.0; scanf("%d",&x) ; scanf("%d",&y) ; scanf("%d",&z) ; sum=x+y+z ; avg=sum/3.0; printf("%f\n",avg); system("pause");

More information

文件

文件 CH10 文件 1 文件的概念 一 文件分类 二 文件的组织结构 : ASCII 码文件 ( 文本文件 ) 二进制文件 文件是二进制代码的, 则文件就是字节流 文件是 ASCII 码的, 则文件就是字符流, 也是字节流 1 如 : 对于整型变量 x, 其值为 32767 若以文本方式存放, 则共有 5 个字符, 内容为 : 00110011 00110010 00110111 00110110 00110111

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

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

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

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

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

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

1 线性空间 基 维数和坐标 3 子空间 4 线性空间的同构 5 线性映射 6 线性映射的像与核 7 线性变换 8 不变子空间 厦门大学数学科学学院网址 :gdjpkc.xmu.edu.c; IP://

1 线性空间 基 维数和坐标 3 子空间 4 线性空间的同构 5 线性映射 6 线性映射的像与核 7 线性变换 8 不变子空间 厦门大学数学科学学院网址 :gdjpkc.xmu.edu.c; IP:// 线性空间与线性映射 知识回顾 1 线性空间 基 维数和坐标 3 子空间 4 线性空间的同构 5 线性映射 6 线性映射的像与核 7 线性变换 8 不变子空间 厦门大学数学科学学院网址 :gdjpkc.xmu.edu.c; IP://11.19.180.133 1 线性空间 厦门大学数学科学学院网址 :gdjpkc.xmu.edu.c; IP://11.19.180.133 定义称 V 是数域 F 上的线性空间,

More information

一、单项选择题, 共十五小题,每小题2分,全题总分为30分

一、单项选择题, 共十五小题,每小题2分,全题总分为30分 810 华南理工大学 2011 年攻读硕士学位研究生入学考试试卷 ( 请在答题纸上做答, 试卷上做答无效, 试后本卷必须与答题纸一同交回 ) 科目名称 : 物流信息基础 ( 含数据库 数据结构 ) 适用专业 : 物流工程与管理, 物流工程 ( 专业学位 ) 本卷满分 :150 分 共 8 页 说明 : 本卷分为数据库和数据结构共两部分内容, 全卷满分 150 分, 其中数据库部分 满分 75 分,

More information

プログラムの設計と実現II

プログラムの設計と実現II UNIX C ls mkdir man http://www.tj.chiba-u.jp/lecture/prog2/ Ctrl+x, Ctrl+s ( )..[4]% gcc Wall o hoge hoge.c..[5]%./hoge 1 : 1 2 : 2 3 : 3 4 : 0 6..[6]% (! )..[4]% gcc Wall o hoge hoge.c..[5]%!g gcc Wall

More information