数据结构
一些遇到的小问题的总结与探讨
白劷
求而不得,不求而得
展开
-
递归实现回文串的判断
//函数实现;bool find(const char *s,int n){ if(n<=1) return true;//递归边界条件(退出条件); else if(s[0]==s[n-1]) return find(s+1,n-2);//依次判断对应位置上的字符是否相等,递归调用,每次字符串长度减2; else return false;}int main(){ string s="abccba"; string ss="a bc c b a"; int len = ss.原创 2020-12-18 23:47:23 · 1068 阅读 · 1 评论 -
用两个栈模拟队列的伪代码实现
已知条件:栈S1与栈S2,有判断栈满函数Isfull(),判栈空IsEmpty(),入栈push(),出栈pop();用这些基本操作来实现EnQueue(),DeQueue(),IsQueueEmpty()函数;基本思路:栈具有先进后出的特性,所以我们用s1来存储进队的元素,用s2来出队,在这个过程中,由于s1出栈的数据是逆序的,再压入s2再次逆序,那么从s2输出的数据就是正常顺序的,用这样的思路模拟一个队列。需要注意的点是:模拟入队和出队的时候,需要判断s1是否已满,以及s2是否为空,当s1满原创 2020-12-01 00:01:50 · 982 阅读 · 0 评论 -
数据结构—拓扑排序
问:什么是拓扑排序,有什么用,应用场景是什么?首先搞清楚什么是AOV网,如果用DAG(有向无环图)来表示一个工程,用<Vi,Vj>来表示活动Vi必须先于Vj进行的这样一种关系,我们把这种有向图称为顶点表示活动的网络,记作AOV网。拓扑排序:有一个有向无环图的顶点组成的一个序列,必须满足如下条件:①每个顶点都必须出现,且只能出现一次;②如果顶点A在序列中的位置处在B的前面,那么在图中不存在由B到A的路径。注意拓扑排序序列并不唯一,每个AOV网都可以有一个或者多个拓扑序列。.原创 2020-11-22 19:53:39 · 501 阅读 · 0 评论 -
图的连通,连通图,连通分量,强连通分量
1.对于无向图而言,如果图中的某两个点,例如:存在W到V的路径,那么我们说w和v是连通的;进一步如果图中任意两点之间都是存在路径的,那么我们说这个是连通的,即可称为连通图。2.连通子图:设G=(V,E)和G`=(V`,E`),如果V`是V的子集,并且E`是E的子集,那么称G`是G的子图。如果子图是连通的,那么就是连通子图,这不难理解。(需要注意,并不是你随便从G=(V,E))中挑的V的子集V`跟E的子集E`,就能构成一个子图,因为有可能挑的边V跟顶点E没有关系,那也就构不成一个图了)3.极大连通子图原创 2020-11-21 18:55:42 · 7874 阅读 · 0 评论 -
40-1
编写一个函数,使得输入的字符串反序保存,在主函数中输入和输出;思路: 编写函数convert()来求逆,string类存字符串,然后依次交换对应位置上的字符,最后输出;代码:#include<iostream>#include<string>using namespace std; #define max 20//设置两个指针,分别指向首尾,当两个指针相遇的时候,意味着遍历完了字符串;void convert(string &str){ int ..原创 2020-10-26 23:05:43 · 134 阅读 · 0 评论 -
有序顺序表插入数据X
思路:设顺序表L为递增有序,从L的终端结点,往前遍历L,找到插入x的位置,插入x,将大于x的元素往后移动一个单位即可;另外,在往前扫描的过程中,可以边扫描边遍历。代码:typedef struct{ ElementType data[100]; int length;}SeqList;//顺序表存储结构;void InsertSeqList(SeqList L,ElementType x){ int i;//i指示位置; for(i=L.length;i>0&&原创 2020-10-23 19:17:19 · 3716 阅读 · 1 评论 -
PAT 1008 数组元素循环右移问题
问题描述:一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式:每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。输出格式:在一行中输出原创 2020-05-12 11:29:39 · 719 阅读 · 0 评论 -
指针
简单说一下数据结构的指针类型;通俗来说,指针也只是种数据类型而已,但是与int,float,char等不同的是,指针是可以存储一个变量的地址的。而指针之所以叫指针是因为它可以存储地址,当我们知道了一个变量的地址后,就可以说是这个指针是指向某个变量的。int a = 1;int *p;//这里就是定义了一个指针,名字叫做p;p = &a;//将变量a的地址赋给p;此时,p中存储的就...原创 2020-04-15 22:35:05 · 230 阅读 · 0 评论 -
用两个栈模拟一个队列,栈的容量分别是O和P(O>P),讨论队列可以实现的最大容量
思路分析: 栈,先进后出;队列,先进先出;用一个栈存储先进来的数据,然后将这个栈全部POP(出栈)到第二个栈中,此时第二个栈的顺序便是理想的出栈顺序。简单来说就是一个栈用来做输入,一个栈用来做输出。如下图: 下面进行可以实现的最大容量讨论: 假设栈1(s1)的容量为O,栈2(s2)的容量为P,并且(O>P),用s1来做存储栈,s2来做...原创 2020-03-26 09:13:39 · 1009 阅读 · 0 评论