数据结构与算法设计
不一样的天蝎座
NLP
展开
-
将两个有序顺序表合并为一个新的顺序表,并由函数返回结果顺序表(非常典型的算法方法)
题目:将两个有序顺序表合并为一个新的顺序表,并由函数返回结果顺序表(非常典型的算法方法)算法思想:第一步:按顺序不断取下两个顺序表中表头较小的结点,存到新的顺序表中第二步:看哪个顺序表有剩余,将剩余结点加到新的顺序表后面代码:bool Merge(SqList A.SqList B, SqList &C){ if (A.length + B.length > C.MaxSize)//大于新的顺序表的最大长度 return false; //显示错误信息false.原创 2020-05-17 22:13:07 · 5646 阅读 · 7 评论 -
从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同(那好吧,标题大众就大众吧)
题目:从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同算法思想:(因为是有序顺序表,所以值相同的元素一定在连续的位置上,用类似于直接插入法的思想)第一步:将第一个元素看成非重复的有序表第二步:依次判断重复有序表中后面的元素与非重复有序表中最后一个元素是否相同,如果相同,则继续向后判断;如果不相同,则插入到非重复有序表最后,直到表尾。代码:bool Del_same(Sqlist &L) { if (L.length == 0) //题目给不给提示,都要首先考虑表空的.原创 2020-05-11 19:27:23 · 2246 阅读 · 0 评论 -
从顺序表中删除其值在给定值s与t之间(包含s和t,要求s小于t)的所有元素,如果s或t不合理或顺序表为空,则显示出错信息并退出运行
题目:从顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t)的所有元素,如果s或t不合理或顺序表为空,则显示出错信息并退出运行算法思想:第一步:从前往后扫描顺序表,用k纪录当前值在给定值s与t之间(包含s和t,s<t)的元素的个数第二步:如果当前元素值满足s与t之间,则k++;如果当前元素值不满足s与t之间,则将当前元素前移k个位置第三步:顺序表的长度-k代码:bool Del_s_t2(Sqlist &L){ int k = 0;//用k纪录当前值在给定.原创 2020-05-11 18:50:58 · 2648 阅读 · 3 评论 -
从有序顺序表中删除其值在给定值s与t之间(包含s和t,要求s小于t)的所有元素,如果s或t不合理或顺序表为空,则显示出错信息并退出程序
题目:从有序顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t)的所有元素,如果s或t不合理或顺序表为空,则显示出错信息并退出程序算法思想:第一步:搜索顺序表,查找删除的第一个元素(第一个=s的元素)纪录其位置为i,并且查找删除的最后一个元素的下一个元素(第一个>t的元素)纪录其位置为j第二步:从位置i,j开始,循环,每次都将位置j上的元素前移到位置i上第三步:顺序表的长度变为i代码:bool Del_s_t(Sqlist &L){ //删除有序顺序表中值在.原创 2020-05-11 17:46:38 · 4003 阅读 · 17 评论 -
对长度为n的顺序表L,编写一个时间复杂度O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素。
题目:对长度为n的顺序表L,编写一个时间复杂度O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素。算法思想:第一步:从前往后扫描顺序表,用k纪录当前值为x的数据元素的个数第二步:如果扫描的当前元素的值为x,则k++;如果扫描的当前元素的值不为x,则将此当前元素向前移动k位代码:void Del_x_k(Sqlist &L) { int k = 0; //用k纪录值为x的数据元素的个数 for (int i = 0; i < L.length; i.原创 2020-05-11 17:07:02 · 3587 阅读 · 6 评论 -
设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)
题目:设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)算法思想:扫描顺序表L的前半部分元素L.data[i] (0<=i<L.length/2),将其与后半部分的对应元素L.data[L.length-1-i]进行交换。代码:void Reverse(Sqlist &L) { ElemType temp; //辅助变量 //交换L.data[i]与L.data[L.length-1-i] for (int i = 0; i < L.l.原创 2020-05-11 16:45:37 · 7775 阅读 · 6 评论 -
从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值。
题目:从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。算法思想:第一步:搜索整个顺序表,查找最小值元素及其位置第二步:搜索顺序表结束后,将最后一个元素放到原最小值元素的位置上。代码:bool Del_Min(Sqlist &L,ElemType &min){ //删除顺序表L中最小值元素结点,并通过引用型参数value返回其值 //若删除成功,则返回true,否则返回false .原创 2020-05-11 16:25:13 · 7298 阅读 · 6 评论 -
今天,我把邻接表给忘了?!
对邻接表的理解:邻接表,是一种顺序分配和链式分配相结合的存储结构。(也就真的只是一种存储结构)原创 2020-05-10 21:17:26 · 150 阅读 · 0 评论 -
字符与字符编码
对字符的理解:字符指类字形单位或符号,包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。从人的角度看,字符就是一个独立的符号。从计算机的角度看,字符就是一串二进制数。而,这串所谓的二进制数就是对字符的编码。当然,根据编码的作用不同,就会分出来不同类型的编码。常用的编码类型:编码类型生日作用编码的长度ASCII1967表示英语和西欧语言1byteGB23121980国家简体中文字符集,兼容ASCII2bytesUnicode199原创 2020-05-10 20:51:31 · 1068 阅读 · 0 评论 -
斐波那契数列的递归实现和非递归实现以及时间复杂度和空间复杂度分析
斐波那契数列是这样一个数列:1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765…表达式为:(注:斐波那契数列也可从n=0开始,对应的F(0)=0)递归和非递归代码实现:#include <iostream>using namespace std;//递归实现斐波那契数列int fib1(...原创 2020-05-08 17:31:00 · 3125 阅读 · 6 评论 -
设n是一个正整数,计算并输出不大于n的但最接近于n的素数(数据结构;Language:C)
编程思想:素数:只能被1和自己本身整除。如果n不是素数,它一定能分解为至少两个因子的乘积,即n=a×bn=a×bn=a×b,其中a大于或等于n\sqrt{n}n原创 2020-03-14 22:28:31 · 5432 阅读 · 0 评论 -
设有10个取值范围为0~9的互不相等的整数存放在数组A[10]中,要求将它们从小到大排序,并存放在一个新数组B[10]中(数据结构;Language:C)
编程思想:将A的整数按其取值直接放入B的相应位置即可实现A中整数从小到大的排列。代码:#include<stdio.h>//包含scanf_s()和printf()的原型int main(){ int A[10] = { 2,5,8,1,0,9,3,7,6,4 };//给定满足要求的10个整数 int B[10]; for (int i = 0; i < 10;...原创 2020-03-01 22:09:18 · 857 阅读 · 6 评论 -
设有三个值不同的整数a,b,c,求其中位于中间值的整数(数据结构;Language:C)
编程思想:(1)首先设定两个记忆单元m1,m2,分别记忆当前最小值和次小值。(2)设定a值为最小值(3)如果b<m1,则b为最小值,原本最小的给次小,b给最小;否则,b给次小(4)引入c类推。代码:#include<stdio.h> //包含scanf_s()和printf()的原型int main(){ int a, b, c;//三个不同值的整数a,b,c...原创 2020-03-01 21:33:11 · 1006 阅读 · 0 评论 -
线性表类型的实现——顺序映像(顺序存储结构),顺序表上的基本操作(初始化、查询、插入、删除)
线性表的顺序存储结构:用一组地址连续的存储单元依次存放线性表中的数据元素。是实现线性表最简单的方法。顺序存储结构的C语言描述:对于线性表来说,可以开辟一个一维数组空间,来存储线性表的数据元素。由于线性表本身的长度是可变的,所以需要一个参量来指示当前的长度。而对于数组来说,它应该有一个当前分配的存储量。另外,顺序存储结构俗称顺序表。#define LIST_INIT_SIZE 80 ...原创 2020-01-20 23:25:07 · 1924 阅读 · 0 评论 -
算法效率的衡量方法和准则——时间复杂度、空间复杂度
衡量算法效率的方法通常有两种:1.事后统计法衡量算法效率最简单的一个办法就是把算法变成一个程序,然后再机器上执行,然后计时,这就是事后统计法。这样显然有一些缺点:1.必须到机器上去计算,而且这个计算不只是一次,我们要用多组数据对其进行重复的运算,然后得到一个统计的结果,那么你要算上机器的时间。2.肯定会有一些其他因素掩盖算法的本质。2.事前分析估算法通常比较算法好坏,都是在设计算法的...原创 2020-01-14 19:35:18 · 11530 阅读 · 0 评论 -
数据类型、抽象数据类型以及抽象数据类型的描述方法和表示方法
数据类型: 是一个值的集合和定义在此集合上一组操作的总称。数据类型有两种:简单型和结构类型。 对于结构类型,比如数组,它的值是可以分割的,它是某个结构的值,因此数组这个数据类型的子集是一个数据结构。所以数据类型也可以看做是一个数据结构和定义在这个数据结构上一组操作的总称。抽象数据类型(Abstract Datat Type, ADT): 是一个数学模型和定义在此数学模型上一组操作。...原创 2020-01-11 15:14:37 · 7367 阅读 · 0 评论 -
数据结构的形式定义、数据的逻辑结构、数据的存储结构
数据结构的形式定义: 数据结构是一个二元组Data_Structures=(D, S),其中,D是数据元素的有限集,S是D上关系的有限集。 说明: 数据结构的定义只说明了数据结构的一个方面,强调的是数据元素之间的逻辑关系。由于数据结构是计算机操作的对象,因此它还有另外一个很重要的方面,就是数据的存储结构,即怎么在计算机中表示出数据的逻辑结构。 数据的逻辑结构: 即数据元素之间的关系,分为...原创 2020-01-10 23:04:24 · 6192 阅读 · 0 评论 -
数据元素、数据项、组合项、数据结构
数据元素: 数据中的一个“个体”(数据本身就是一个集合) ,是数据结构中讨论的基本单位。注意: 数据元素不是数据结构中讨论的最小单位。它可以由多个数据项组成,是数据项的集合。数据项: 数据结构中讨论的最小单位。注意: 数据项虽然是数据结构中讨论的最小单位,但是它是可分的,可分为多个数据项。组合项: 可分的数据项称为组合项。对三者关系的举例: 假设一个运动员包含6个数据项:...原创 2020-01-10 23:03:29 · 4109 阅读 · 0 评论 -
动态规划之矩阵连乘问题
代码:#include "stdafx.h"#include <iostream>using namespace std;int b[1000], m[1000][1000], t[1000][1000]; //数组b存储n个矩阵的阶数下标void MatrixChain(int n){ for (int i = 1; i <= n; i++) m[i][i...原创 2019-05-11 19:45:37 · 358 阅读 · 0 评论