当前位置:文档之家› 数据结构期末考点总结

数据结构期末考点总结

} 取对头 Status GetHead(sqqueue &Q,Qelemtype &e)
{ if (Q.front == Q.rear ) return ERROR; return Q.base[Q.front];
}
第四章
重点:串的比较、连接,了解串的插入,删除 定义 typedef struct { char *ch;
}
第五章 数组和广义表
重点:特殊矩阵,稀疏矩阵(明白思路)
对称矩阵 aij=aji 0≤i,j ≤n-1
SA[k]= aij
k=i(i+1)/2+j(i>=j)或 k=j(j+1)/2+i(i< j)
稀疏矩阵 一般采用三元组存储一个非零元素。
如:三元组
(1,5,a) (2,2,b) (3,4,c) (4,7,d)
} TSmatrix
第六章 树与二叉树
重点:1、二叉树的遍历和性质,
2、树的存储结构及遍历
3、哈夫曼树
基本概念
结点的度 : 结点拥有子树的数目
i
叶结点 : 结点的度为零的结点
分枝结点 : 结点的度非零的结点
树的度 : 树中各结点度的最大值
孩子
: j,k,l 称为 i 的孩子
j
k
l
双亲
: i 称为 j,k,l 的双亲
typedef struct Dublnode{ Elemtype data; struct Dublnode *prior ; struct Dublnode *next ;
}Dublnode,*Dublinklist ; 了解:有序表的合并
void Mergelist_L(Linklist &La, Linklist &Lb, Linklist &Lc) { pa=La->next; pb=Lb->next; Lc=pc=La; while (pa&&pb) { 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; free(Lb); }
} 栈的插入 Status Push(Sqstack &s,Selemtype e)
{ if (s.top-s.base>=s.stacksize) { s.base=追加分配空间; s.stacksize+=Stackincrement; }
*s.top++=e; return Ok } 栈的删除栈顶 Status Pop(Sqstack &s,Selemtype &e) { if (s.top==s.base) return ERROR; e=*--s.top return Ok } 队列的顺序存储表示与实现 typedef struct{ Qelemtype *base; int front; 指向第一个元素(有数) int rear; 指向最后一个元素的下一位(为空) }Sqqueue; 队空条件: Q.front = Q.rear 队满条件: (Q.rear+1) % Maxsize= Q.front 队列长度:(Q.rear-Q.front+Maxsise)%Maxsize 队的插入: Status Enqueue(sqqueue &Q,Qelemtype e) { if ((Q.rear+1)%Maxsize==Q.front)
}
}
先序
Void preorder(bt)
{ if (bt)
{visit(bt->data);
preorder(bt->lchild);
} 线性表定位删除
Status Listdelete_Sq(Sqlist &L,int i, Elemtype &e) {
if (i<1‖i >L.length) return ERROR; e= L.elem[i-1]); for (j=i;j<L.length;++j)
L.elem[j-1]=L.elem[j]); --L.length; return OK; } 单链表定义:
int length; } Hstring ; 比较 status strcompare(S,T) { for (i=0;i<S.length &&i<T.length; ++i)
if ( S.ch[i]!=T.ch[i] ) return S.ch[i]-T.ch[i]; return S.length-T.length; } 连接 Status concat(&t,s1,s2)
return ERROR; Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%Maxsize; return OK; } 队的删除 Status Dequeue(sqqueue &Q,Qelemtype &e)
{ if (Q.front == Q.rear ) return ERROR; e=Q.base[Q.front]; Q.front=(Q.front+1)%Maxsize; return OK;
第二章 线性表
重点: 1、链式和线性表两种方式的插入与删除 2、单双链表的定义 线性表的定义 #define List-Init-Size 100 #define Listincrement 10 typedef struct {
Elemtype *elem; int length; int listsize; } Sqlist; 线性表定位插入 Status Listinsert_Sq(Sqlist &L,int i, Elemtype e)
typedef struct Lnode { Elemtype data; struct Lnode *next;
} Lnode, *Linklist; 链式定位插入
Status Listinsert_L(Linklist &L,int i,Elemtype e) { p=L; j=0; while (p&&j<i-1) {p=p->next;++j } if ( !p ‖j>i-1) return ERROR; new(s); s->data=e; s->next=p->next; p->next=s; return OK; }
性质 2: 深度为 k 的二叉树,至多有 2k -1 个结点。(等比求和)
性质 3: 对任意二叉树 BT ,若叶结点数为 n0 ,度为 2 的结点数为 n2,则 n0 = n2 +1
性质 4:具有 n 个结点的完全二叉树深度为 [ log2n ]+1 (取整)
性质 5:对结点数为 n 的完全二叉树,第 i 个结点有如下特征:
兄弟
: j,k,l 互为兄弟
祖先
: 树的根结点到某结点 j 路径上的所有结点,为结点 j 的祖先
子孙
: 结点 i 下的所有结点,称为结点 i 的子孙
结点层次 : 从根结点到某结点 j 路径上结点的数目
树的深度 : 树中结点的最大层次
有序树 : 若树中结点的各子树从左到右是有次序的,称该树为有序树,否则为无序树
第一章 绪论
数据——所有输入计算机中并被计算机处理的符号。 数据元素——数据的基本单位,通常作为一个整体。 数据对象——性质相同的数据元素的集合。 数据结构——数据元素以及之间存在的关系。
1 、线性结构;2、集合结构 3、树形结构; 4、图结构 数据结构的形式定义:Data--Structure=(D,S) D——数据元素集合 S——关系集合 数据的逻辑结构——用形式化方式描述数据元素间的关系。 数据的物理结构——数据在计算机中的具体表示。 数据类型——一种数据结构和定义在其上的一组操作。可以形式化定义为: Data--Type=(D,S,P) 算法的定义 是对特定问题求解步骤的一种描述, 是指令的有限序列。 算法的特性 有穷性——算法必须在执行有穷步之后结束,而且每一步都可在有穷时间内完成。 确定性——每条指令无二义性。 可行性——算法中描述的每一操作,都可以通过已经实现的基本运算来实现。 输入——算法有零至多个输入。 输出——算法有一个至多个输出。 时间复杂度的等级 O(1) O(log n) O(n) O(n×log n) O (n2) O (nK) O(Xn )
0000a00

0b0000
0
000c000 m
000000 ×
d
n
三元组定义
#define Maxsize=1000
typedef struct
{ int
i , j;
elemtype e;
} triple
typedef struct
{ triple data[Maxsize+1]
int
m , n , num;
森林
: 由 m 棵互不相交的树构成 F=(T1,T2,.......Tm)
二叉树的性质
定义: 深度为 k 且有 2k -1 个结点的二叉树称为满二叉树
定义: 深度为 k 且有 n 个结点的二叉树,当且仅当 n 个结点都满足满二叉树的位置编号
的升序排列结构时,称为完全二叉树
性质 1: 在二叉树的 i 层上至多有 2i -1 个结点。(归纳法证明)

{ if (t.ch) free(t.ch); if ( ! (T.ch=(char*) malloc((s1.length+s2.lengrh)*sizeof(char)))) exit(overflow); t.ch[0..s1.length-1]=s1.ch[0..s1.length-1]; t.length=s1.length+s2.length; t.ch[s1.length..t.length-1]=s2.ch[0..s2.length-1]; return OK;
相关主题