大二上数据结构复习2

第二章线性表

综合

一、在什么情况下用顺序表比用链表好
表长度确定,很少进行插入删除操作且经常访问元素
二、2-4 顺序表的插入和删除要求仍然保持各个元素原来的次序。设在等概率情形下, 对有 127 个元素的顺序表进行插入, 平均需要移动多少个元素? 删除一个元素, 又平均需要移动多少个元素?
【解答】
若设顺序表中已有 n = last+1 个元素,last 是顺序表的数据成员,表明最
后表项的位置。又设插入或删除表中各个元素的概率相等,则在插入时因有 n+1
个插入位置(可以在表中最后一个表项后面追加),每个元素位置插入的概率为
1/(n+1),但在删除时只能在已有 n 个表项范围内删除,所以每个元素位置删除
的概率为 1/n。
在这里插入图片描述
插入时平均移动元素个数 AMN(Averagy Moving Number )为 127/2 删除时平均移动元素个数 AMN 为 126/2

算法设计

一、删除带头结点的有序链表中所有其值大于A且小于B的数据元素:分析以下删除结点的特点:下界A,上界B;A<…<B
思路:主要分为三步
1、将p指针定位到第一个大于A的位置同时将pre指针定位到最后一个大于等于A的位置
2、将p指针定位到第一个大于等于B的位置
3、使用q指针和s指针将待删除数据free

pre=l;p=l->next;
While(p&&p->data<=A){ pre=p;p=p->next;}
if(p)
{
While(p&&p->data<B)p=p->next;
q=pre->next; pre->next=p;
While(q!=p){s=q;q=q->next;free(s);}
}

二、链式存储结构的原地逆置
在这里插入图片描述
思路:首先将首元素next指向NULL,接下来每次都将q所指向的元素的next指向H->next并令H->next=此元素

void  ReverseList( LinkList  &L  )
{// 将L 所指的带头结点的单链表逆置
if( L->next && L->next->next){//当链表不是空表或单结点时p=L->next;q=p->next; p -> next=NULL;//将开始结点变成终端结点while (q) {//每次循环将后一个结点变成开始结点p=q; q=q->next ; p->next = L-> next  ;L->next = p;}
}
}

第四章串

注意:定长顺序存储即将字符存于数组中且总下标1开始,而0号单元存储长度
串的模式匹配:子串的定位操作
int Index(SString S,SString T, int pos){
//返回子串T在主串S中第pos个字符之后的位置,若不存在,则函数值为0,其中,T非空,(1≦pos≦Strlength(S))。i=pos;    //指向串s的第pos个字符j=1;        //指向串t的第1个字符while((i<=S[0])&&(j<=T[0]){if(S[i]==T[j]) { ++i; ++j; } //继续比较后继字符else {i=i-j+2; j=1;} //串S指针回溯重新开始匹配}if(j>T[0])   return  i-T[0];  //匹配成功,返回模式串t在串s中的起始位置else  return 0;                  //匹配失败返回0
} //Index

第五章数组和广义表

综合

一、若在一维数组 B 中从 0 号位置开始存放,则对称矩阵 A 中的任一元素aij
在只存下三角部分的情形下应存于一维数组 B 的什么下标位置?给出计算
公式
答:只存下三角部分时,若 i > j,则数组元素 A[i][j]前面有 i-1 行(1i-1,),第 1 行 有 1 个元素,第 2 行有 2 个元素,第 i-1 行有 i-1 个元素。在第 i 行中,第 j 号元素排在第 j-1 个元素位置,因此,数组元素 A[i][j]在数组 B 中的存放位置为1 + 2 +…+ (i-1) + j-1 = ( i-1)*i / 2 + j-1
若 i < j,数组元素 A[i][j]在数组 B 中没有存放,可以找它的对称元素 A[j][i]。在数组 B 的第 (j-1)j / 2 + i-1 位置中找到。(之所以减一是因为从零开始存储)
在这里插入图片描述
4.二维数组A[10][20]采用列序为主方式存储,每个元素占一个存储单元,且A[0][0]的地址是200,则A[6][12]的地址是      。
【答案】326
【解析】采用列主序时,LOC(A[6][12])=LOC(A[0][0]+(12
10+6)*1=326

第六章树和二叉树

1、求树的深度

int Depth (BiTree T ){ // 返回二叉树的深度if ( !T )    depthval = 0;else   {depthLeft = Depth( T->lchild );depthRight= Depth( T->rchild );depthval = 1 + (depthLeft > depthRight  ?depthLeft : depthRight);} return depthval;
}

2、 由先序ABC##DE#G##F###建树

BiTree CreatBinTree(){BiTree B;B = (BiTree)malloc(sizeof(BiTNode));char c;scanf("%c",&c);if(c != '#'){B->data = c;B->lchild = CreatBinTree();B->rchild = CreatBinTree();}else B = NULL;return B;
}

第七章图

迪杰斯特拉算法
在这里插入图片描述
在这里插入图片描述

第九章查找

折半查找非递归算法和递归算法

//非递归
int halfSearch(List list,int x){int low = 1;//从一开始存储int high = list.length;int mid;while(low<=high){mid = (low + high)/2;if(x == list[mid])return mid;else if(x <= list[mid])high = mid;else low = mid;}return 0;
}
//递归
int halfSearch(int low,int high,int x){if(low <= high)return 0;int mid = (low + high)/2;if(x == list[mid])return mid;else if(x < list[mid])return halfSearch(low,mid,x);else return halfSearch(mid,high,x);return 0;
}

索引顺序表
索引顺序表是一种性能介于顺序查找和折半查找之间的查找方法。在建立顺序表的同时,建立一个索引
在这里插入图片描述
解释:在0 ~ 5之间21为最大的数,在5 ~ 10之间40最大,在10以后78最大,所以比如要查找33,先和21、 40、 78比较,33<40且33>21,所以在第二个区间顺序查找

第十章排序

简单选择排序

void SelectSort(SqList &L){  for(i=1;i<L.length; ++ i) {//进行n-1趟排序,每趟选出1个最小记录//假定起始位置为最小记录的位置j=SelectMinkey(L,i); //在L.r[i … n]中查找最小记录if(i!=j) {temp = L.r[i];L.r[i]=L.r[j]; L.r[j] = temp;}//交换记录,若选出的是第i个,则不进行交换}// SelectSort

一趟快速排序在这里插入图片描述

int Partition (SqList &L, int low, int high) {L.r[0] = L.r[low];  pivotkey = L.r[low].key; //枢轴  while (low<high) {while(low<high&&L.r[high].key>=pivotkey)--high;//从右向左搜索L.r[low] = L.r[high];while(low<high &&L.r[low].key<=pivotkey)++low;//从左向右搜索L.r[high] = L.r[low];}
}// Partition         

起泡排序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统(王道笔记第二章)

目录第二章 2.1_1进程的定义、组成、组成形式、特征 2.1_2进程的状态与转换 2.1_3进程的控制 2.1_4进程通信 2.1_5线程概念和多线程模型 2.2_1处理机调度的概念层次 2.2_2处理机调度的时机、切换与过程、方式 2.2_3调度算法的评价指标 2.2_4FCFS、SJF、HRRN调度算法 2.2_5时间片…

C语言画图形(图形库graphics的使用)

目录 工具 c语言基本绘图 文字输出 c语言基本贴图 获取鼠标、键盘信息 工具 &#xff08;1&#xff09;环境&#xff1a;VC &#xff08;2&#xff09;库函数&#xff1a;graphics.h&#xff08;因为不是标准库函数&#xff0c;所以需下载EASYX&#xff09; &#xff08;3&am…

关于DDD中Domain的思考

2019独角兽企业重金招聘Python工程师标准>>> 本文既不推销UML&#xff0c;也不推广DDD&#xff0c;更不涉及各种论战。-- 作者 某天又一次打开关于DDD(领域驱动设计)的PDF文档时&#xff0c;自己有了个疑问&#xff1a;什么是领域(Domain)&#xff1f;译文中是这样描…

算法设计TSP问题动态规划

#include <iostream> #include <cmath> using namespace std; //集合虚拟化用000 、001 、010 、011 、100 、101 、110 、111分别表示{} 、{1}&#xff08;V[2^(1-1)]&#xff09; 、{2}&#xff08;V[2^(2-1)]&#xff09; 、{1,2}&#xff08;V[2^(1-1)2^(2-1)]…

字符串使用与内部实现原理

Redis 发展到现在已经有 9 种数据类型了&#xff0c;其中最基础、最常用的数据类型有 5 种&#xff0c;它们分别是&#xff1a;字符串类型、列表类型、哈希表类型、集合类型、有序集合类型&#xff0c;而在这 5 种数据类型中最常用的是字符串类型&#xff0c;所以本文我们先从字…

Lisp-Stat翻译 —— 第九章 统计绘图窗体

2019独角兽企业重金招聘Python工程师标准>>> 第九章 统计绘图窗体 除了前几章略述的绘图窗体原型提供的基本绘图工具之外&#xff0c;Lisp-Stat里的统计绘图还需要用来管理数据和将那些数据转换成屏幕上的图形的工具集。这些工具由绘图原型graph-proto提供。更多的…

操作系统(王道笔记第三章内存)

第三章内存3.1_1内存的基础知识&#xff08;1&#xff09;什么是内存&#xff1a;略&#xff08;2&#xff09;进程运行的基本原理①从写程序到程序运行②链接③装入3.1_2内存管理的概念&#xff08;1&#xff09;内存管理管哪几个方面&#xff08;2&#xff09;内存保护①上下…

Redis 快速搭建与使用

Redis 是由 C 语言开发的开源内存数据存储器&#xff0c;经常被用作数据库、缓存以及消息队列等。 Redis 因为其强大的功能和简洁的设计&#xff0c;深受广大开发者和公司的喜爱&#xff0c;几乎占领了内存数据库市场的所有份额。 1 Redis 特性 Redis 有很多优秀的特性&#…

hibernate annotation注解方式来处理映射关系

2019独角兽企业重金招聘Python工程师标准>>> 在hibernate中&#xff0c;通常配置对象关系映射关系有两种&#xff0c;一种是基于xml的方式&#xff0c;另一种是基于annotation的注解方式&#xff0c;熟话说&#xff0c;萝卜青菜&#xff0c;可有所爱&#xff0c;每个…

操作系统Ubuntu(实验一二)

摘录&#xff1a;https://www.cnblogs.com/penglang14/p/10632360.html 实验一二1.1_小技巧1.2_ls查看目录命令1.3_cd切换目录命令1.4_查看文件内容命令(1)cat filename(2)more filename(3)head [-n] filename([]表示此内容可有可无)&#xff08;4&#xff09;wc命令确定行数、…

Redis 是如何执行的?

在以往的面试中&#xff0c;当问到一些面试者&#xff1a;Redis 是如何执行的&#xff1f;收到的答案往往是&#xff1a;客户端发命令给服务器端&#xff0c;服务端收到执行之后再返回给客户端。然而对于执行细节却「避而不谈」 &#xff0c;当继续追问服务器端是如何执行的&am…

第五章I/O管理

I/O章节5.1.1I/O分类&#xff08;1&#xff09;按使用特性分&#xff08;2&#xff09;I/O设备按传输速率分类&#xff08;3&#xff09;I/O设备按信息交换的单位分5.1.2I/O控制器5.1.3I/O控制方式&#xff08;1&#xff09;程序直接控制方式&#xff08;轮询&#xff09;&…

列表使用与内部实现原理

列表类型 (List) 是一个使用链表结构存储的有序结构,它的元素插入会按照先后顺序存储到链表结构中,因此它的元素操作 (插入\删除) 时间复杂度为 O(1),所以相对来说速度还是比较快的,但它的查询时间复杂度为 O(n),因此查询可能会比较慢。 1 基础使用 列表类型的使用相对来…

操作系统习题

操作系统习题习题一一、选择习题二一、选择二、综合题习题三一、选择题&#xff1f;二、简答题进程互斥遵循的四个原则&#xff1a;空闲让进、忙则等待、有限等待、让权等待重点习题四一、选择&#xff1f;&#xff1f;二、综合题死锁产生的 4 个必要条件是&#xff1a; &#…

WCF trace、log

1. 打开wcf配置&#xff1a; &#xff12;. enable trace &#xff0c; log 可以改变log路径&#xff1a; &#xff13;. 用 SvcTraceViewer.exe &#xff08;直接在c盘下搜索&#xff09; 查看 &#xff14;. 如果想自定义trace&#xff1a; catch(Exception ex) { Trace.Writ…

字典使用与内部实现原理

字典类型 (Hash) 又被成为散列类型或者是哈希表类型,它是将一个键值 (key) 和一个特殊的“哈希表”关联起来,这个“哈希表”表包含两列数据:字段和值。例如我们使用字典类型来存储一篇文章的详情信息,存储结构如下图所示: 同理我们也可以使用字典类型来存储用户信息,并且…

算法设计与分析复习第一二章(时间复杂度和蛮力法)

算法复习一二章第一章时间复杂度第二章蛮力法&#xff08;1&#xff09;查找问题顺序查找&#xff08;2&#xff09;排序问题选择排序起泡排序&#xff08;3&#xff09;组合问题0-1bag问题概述&#xff08;略&#xff09;&#xff08;4&#xff09;图问题哈密顿回路TSP问题&am…

有序集合使用与内部实现原理

有序集合类型 (Sorted Set) 相比于集合类型多了一个排序属性 score(分值),对于有序集合 ZSet 来说,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个是排序值。有序集合的存储元素值也是不能重复的,但分值是可以重复的。 当我们把学生的成绩存储在有序集…

Android 友盟SDK 终极解决报错:SocialSDK_QQZone_2.jar contains native libraries that

转自&#xff1a;http://bbs.umeng.com/thread-6552-1-2.html 报错信息&#xff1a;The library SocialSDK_QQZone_2.jar contains native libraries that will not run on the device.解决方案&#xff1a;此问题和Eclipse环境有关&#xff0c;按照如下步骤操作即可Eclipse-&g…

Redis 持久化——AOF

使用 RDB 持久化有一个风险,它可能会造成最新数据丢失的风险。因为 RDB 的持久化有一定的时间间隔,在这个时间段内如果 Redis 服务意外终止的话,就会造成最新的数据全部丢失。 可能会操作 Redis 服务意外终止的条件: 安装 Redis 的机器停止运行,蓝屏或者系统崩溃;安装 R…