数据结构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a
11
d h j b
k
c i e f
先序: 中序:
abdjcefhi djbaechif
------------------------------------------------------------------------------------------------------------------------第七章 图 1. 图的基本概念:图的基本术语及推论 2. 邻接矩阵:邻接矩阵的定义 3. 图的遍历 (1)深度优先遍历 (2)广度优先遍历 4. 拓扑排序:拓扑序列 -------------------------------------------------------------------------------------------------------------------A B E F C D
4、完全二叉树必须满足的条件为前n个结点的树形结构与其满二叉树的 前n个结点的树形结构要相同。 5、哈夫曼树不存在度为1的结点。 6、根据二叉搜索树插入算法画出下列数据{12, 56,23,76,18,34, 47,6}依次插入后生成的二叉搜索树,并写出查找“76“的过程。 12 6 56 23 76 18 34 47 查找76: 与12比较: 大 , 向右子树查找
{ printf(“入栈操作出错!\n”); return 0; } p->data=e; //插入 p->next=top->next; top->next=p; return 1; } //出栈 int Pop(LinkStack top , DataType *e) { SNode *p; if(!top->next) { printf(“栈空,无法完成出栈操作!\n”); return 0; } p=top->next; top->next=p->next; //删除栈顶结点 *e=p->data; free(p); return 1; } //main函数 视已初始化 void main() { if( StackEmpty(top) ) //栈空 Push(top, e); else Pop(top,*e); //出栈 } ------------------------------------------------------------------------------------------------------
2、已知遍历一棵二叉树的前序序列ABCDEFG和中序序列
CBEDAFG,那么是下面哪棵树(C)。
A B C F D E G A B C F D E G
A
B A B C F D E G A B C F
D E G
C
D
Βιβλιοθήκη Baidu
3、如下图所示的一棵二叉树进行遍历,得到的遍历序列未CADREFB, 则该遍历序列是(B)的结果。 R B A E D C F A. 前序遍历 B. 中序遍历 C. 后序遍历 D. 层次遍历
--------------第六章 树和二叉树 1. 树 (1) 树的概念及术语 2. 二叉树 (1) 二叉树的定义 (2) 特殊二叉树 ●满二叉树 ●完全二叉树 (3)二叉树的性质:性质1-5 1.第i层最多有2^(i-1)个结点。 2.深度h的非空二叉树最多有2^h-1个结点。 3.度为0的结点数为a,度为2的结点数为b。则a=b+1。 4.最有n个结点的完全二叉树深度h=|log2n|+1。 5.略。 3. 二叉树的遍历 (1) 前序遍历 根左右 (2) 中序遍历 左中右 (3) 后序遍历 左右中 4. 森林 (1)森林的遍历:先序遍历森林和中序森林 5. 二叉搜索树 (1)二叉搜索树的定义及构建 6. 哈夫曼树 (1)哈夫曼树的基本概念 (2)哈夫曼树的构造算法思想及构造过程 --------------------------------------------------------------------------------------------------------------------1、已知一棵完全二叉树有47个结点,则该二叉树有(C)个叶子结点。 A. 6 B. 12 C. 24 D.48
int InitList(LIST * &H) { //H为指向单链表的头指针 H=new LIST; while(!H) { cout<<"initialization error"<<endl; return 0; } H->next=NULL; cout<<"initialization successed!"<<endl; return 1; } //向链表指定位置插入一个新元素 int ListInsert(LIST *H , int pos, ElemTate item) { LIST *p=H; int i=0; while( p ){ //查找pos的前驱 if(i+1==pos) break; p=p->next; i++; } if(p==NULL){ //查找不成功,退出运行 cout<<"插入位置无效"<<endl; return 0; } LIST *t=new LIST; t->data=item; //① t->next=p->next; //② p->next=t; //③ return 1; } //遍历单链表 void TraverseList(LIST * H) { //H为指向单链表的头指针 LIST *p=H->next; while(p)
{ cout<<p->data<<" "; p=p->next; } cout<<endl; } //删除 int ListDelete(LIST *H, int pos, ElemTate *item) { LIST *p=H, *q; int i=0; while(p->next && i<pos-1) //寻找被删结点的前驱 { p=p->next; i++; } if(!p->next || i>pos-1) { printf(“删除位置不合法!”); return 0; } q=p->next; //删除 p->next=q->next; *item=q->data; //返回被删结点 free(q); return 1; } --------------------------------------------------------------------------------------------------------------第3章 栈和队列 1. 栈
与56比较: 大 , 向右子树查找 与76比较: 相等 , 查找成功! 7、有5个带权结点,其权值分别为2,5,3,7,11,根据哈夫曼算法构 建该树,并计算该树的带权路径长度。 WPL=2*4+3*4+5*3+7*2+11*1=60 11 7 5 2 3 8、写出先序和中序遍历下面森林得到的序列
(1) 栈的结构与定义 (2) 顺序栈操作算法:入栈、出栈、判断栈空等 (3) 链栈的结构与定义 2. 队列 (1) 队列的定义 --------------------------------------------------------------------------------------------------------------1、一个栈的入栈序列为“ABCDE”,则以下不可能的出栈序列是(B) A. BCDAE B. EDACB C. BCADE D. AEDCB 2、栈的顺序表示中,用TOP表示栈顶元素,那么栈空的条件是(D) A. TOP==STACKSIZE B. TOP==1 C. TOP==0 D. TOP==-1 3、允许在一端插入,在另一端删除的线性表称为队列。插入的一端为 队尾,删除的一端为队头。 4、栈的特点是后进先出,队列的特点是先进先出。 5、对于栈和队列,无论他们采用顺序存储结构还是链式存储结构,进 行插入和删除操作的时间复杂度都是O(1)。 6、已知链栈Q,编写函数判断栈空,如果栈空则进行入栈操作,否则出 栈并输出。(要求判断栈空、出栈、入栈用函数实现) //结构体 typedef struct SNode{……}SNode, *LinkStack; //判断栈空 int StackEmpty(LinkStack top) { if(top->next==NULL) return 1; else return 0; } //入栈 int Push(LinkStack top, DataType e) { SNode *p=new SNode; if(!p)
复习提纲
第1章 数据结构概述 基本概念与术语(P3) 1. 数据结构 一门研究非数值计算程序设计问题中计算机的操作多像以及 它们之间的关系和操作等的学科 2. 数据 用来描述现实世界的数字 字符 图像 声音 以及能够输入到计 算机中并能被计算机处理的符号集合 2.数据元素 是数据的基本单位,是数据这个集合中的个体,也称为元素 结点 顶点 记录 3.数据对象 是具有相同性质的数据元素的集合,是数据的一个子集 4.数据结构 (1)数据的逻辑结构 是相互之间存在一种或多种特定关系的数据元素的集合 (2)数据的存储结构 是数据元素之间存在的固有的逻辑关系,常简称为数据结构 5.时间复杂度分析 ------------------------------------------------------------------------------------------------------------------1、名词解释:数据结构、二元组
1、对于上图所示的有向图,其深度优先搜索遍历序列为ADFECB,广度 优先搜索遍历序列为ABCDEF,其拓扑排序序列为ABDFCE。 2、一个具有N个顶点的完全无向图的边数为n(n-1)/2;一个具有N个顶点
二元组的定义: <D,R>
2、根据数据元素之间关系的不同,数据的逻辑结构可以分为 集合、线 性结构、树形结构和图状结构四种类型。 3、常见的数据存储结构一般有四种类型,它们分别是 顺序存储结构、 链式存储结构、索引存储结构和散列存储结构。 4、以下程序段的时间复杂度为O(n^2)。
int i,j,x; for(i=0;i<n:i++) for(j=0;j<n;j++) x+=i; ----------------------------------------------------------------------------------------------------------------第2章 线性表 1. 顺序表结构 2. 单链表 (1) 链表结点结构 (2) 结点遍历 (3) 链表操作算法:初始化、插入、输出、删除 ---------------------------------------------------------------------------------------------------------------1、线性表中,第一个数据元素没有直接前驱,最后一个数据 元素没有 直接后驱。 2、在一个单链表中,若p所指结点是q所指结点的前驱结点,则删除结 点q的操作语句为p->next=q->next, free(q)。 3、在长度为N的顺序表仲,插入一个新元素平均需要移动表中N/2个元 素,删除一个元素平均需要移动(N-1)/2个元素。 4、若线性表的主要操作是在最后一个元素之后插入一个元素或删除最 后一个元素,则采用顺序存储结构最节省运算时间。 5、已知顺序表中每个元素占用3个存储单元,第13个元素的存储地址为 336,则顺序表的首地址为300。 6、设有一带头结点单链表L,请编写该单链表的初始化,插入、输出和 删除函数。(函数名自定义) //结构体 typedef struct SNode{…..}SNode,LIST; //初始化单链表