大二上数据结构复习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,一经查实,立即删除!

相关文章

Java SimpleTimeZone inDaylightTime()方法及示例

SimpleTimeZone类inDaylightTime()方法 (SimpleTimeZone Class inDaylightTime() method) inDaylightTime() method is available in java.util package. inDaylightTime()方法在java.util包中可用。 inDaylightTime() method is used to check whether the given date (d) is …

MySQL 命令和内置函数

如何用命令行方式连接 MySQL 数据库? 使用 mysql -u用户名 -p密码; 输入用户名和密码就可以正常进入数据库连接了,实例如下: mysql -uroot -p123456; 其中,用户名为 root,密码为 123456。 关于命令 mysql -h 127.0.0.1 -uroot -P 3307 -p3307 以下说法错误的是? A.-h …

Oracle plsql 月历

declarev_year number : 2013;v_month number : &input_month;v_day number;v_lastday number;begindbms_output.put_line(v_year || 年 || v_month || 月的月历);--转换星期为数字&#xff0c;方便计算case substr(to_char(to_date(v_year || v_month,yyyymm),day),3,1)wh…

Java GregorianCalendar setTimeZone()方法与示例

GregorianCalendar类setTimeZone()方法 (GregorianCalendar Class setTimeZone() method) setTimeZone() method is available in java.util package. setTimeZone()方法在java.util包中可用。 setTimeZone() method is used to sets the time zone with the specified TimeZon…

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

目录第二章 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时间片…

MySQL 中日志的面试题总结

MySQL 有哪些重要的日志文件? MySQL 中的重要日志分为以下几个: ① 错误日志:用来记录 MySQL 服务器运行过程中的错误信息,比如,无法加载 MySQL 数据库的数据文件,或权限不正确等都会被记录在此,还有复制环境下,从服务器进程的信息也会被记录进错误日志。默认情况下,…

centos不能挂在ntfs

roots 下载]# mount /dev/sdb1 /mnt mount: unknown filesystem type ntfs wget http://www.tuxera.com/community/ntfs-3g-download/ http://tuxera.com/opensource/ntfs-3g_ntfsprogs-2014.2.15.tgz 下载&#xff0c;安装 ./configure make make install 用法&#xff1a; mo…

Oracle 练习题 20131017

--2013-10-17 练习题--1、输入一个年份&#xff0c;判断其是不是闰年&#xff0c;并做相应的提示。--方法一&#xff1a;正常算declarev_year number : 1900;beginif mod(v_year,100) 0 thenif mod(v_year,400) 0 thendbms_output.put_line(v_year || 是闰年);elsedbms_outpu…

Java类类getDeclaredMethod()方法及示例

类的类getDeclaredMethod()方法 (Class class getDeclaredMethod() method) getDeclaredMethod() method is available in java.lang package. getDeclaredMethod()方法在java.lang包中可用。 getDeclaredMethod() method is used to return Method objects that indicate the …

MySQL 常见的开放性问题

有一个超级大表,如何优化分页查询? 超级大表的分页优化分有以下两种方式: 数据库层面优化:利用子查询优化超多分页场景,比如:SELECT a.* FROM 表 1 a, (select id from 表 1 where 条件 LIMIT 100000,20 ) b where a.id=b.id ,先快速定位需要获取的 id 段,然后再关联查…

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;译文中是这样描…

Oracle plsql 计算日期间工作日天数

declarev_fdate date : to_date(2013-10-4,yyyy-mm-dd);v_ldate date : to_date(2013-10-22,yyyy-mm-dd);v_interval_a number;v_interval_b number;v_interval_all number;begin--先算整周有几周&#xff0c;然后乘一周五天工作日v_interval_a : floor((v_ldate - v_fdate)/7)…

MySQL 性能优化 分布式

MySQL 性能指标都有哪些?如何得到这些指标? MySQL 的性能指标如下: ① TPS(Transaction Per Second) 每秒事务数,即数据库每秒执行的事务数。 MySQL 本身没有直接提供 TPS 参数值,如果我们想要获得 TPS 的值,只有我们自己计算了,可以根据 MySQL 数据库提供的状态变…

Java Collections CheckedCollection()方法与示例

集合类的checkedCollection()方法 (Collections Class checkedCollection() method) checkedCollection() Method is available in java.lang package. DrawnCollection()方法在java.lang包中可用。 checkedCollection() Method is used to return the typesafe view of the gi…

算法设计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)]…

Oracle 练习题 20131021 for 循环练习

--Oracle 练习题 20131021 for 循环练习--1、用for循环实现一个倒置的乘法表。beginfor i in reverse 1 .. 9 loopfor j in reverse 1 .. i loopdbms_output.put(i || x || j || || i * j || );end loop;dbms_output.put_line();end loop;end;--2、打印1-100之间所有的素数。…

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

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

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

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

Java ClassLoader getSystemResource()方法与示例

ClassLoader类getSystemResource()方法 (ClassLoader Class getSystemResource() method) getSystemResource() method is available in java.lang package. getSystemResource()方法在java.lang包中可用。 getSystemResource() method is used to find the system resource of…