数据结构
黄 坤
已毕业
展开
-
从顺序表中删除一个具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行
1.从顺序表中删除一个具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。算法思想:搜索整个顺序表,查找最小值并记住其位置,搜索结束后用最后一个元素填补空出的最小值元素的位置bool Del_Min(sqList &L,ElemType &value){//若删除顺序表L中最小值元素结点,并通过引用参数类型value返回其值//若删除成功,则返回true;否则返回false if(L.length==0)原创 2020-06-10 22:05:48 · 3248 阅读 · 1 评论 -
数据结构——常用排序代码
1.内部排序1.1.插入排序1.1.1.直接插入排序void InsertSort(ElemType A[],int n){ int i ,j; for(i=2;i<=n;i++){ //依次将A[2]~A[n]插入到前面已排序序列 if(A[i]<A[i-1]){ //若A[i]关键码小于前驱,将A[i]插入有序表 A[0]=A[i]; //复制为哨兵,A...原创 2020-04-25 19:58:34 · 591 阅读 · 0 评论 -
数据结构学习思维导图
原创 2020-04-07 16:40:49 · 243 阅读 · 0 评论 -
二叉树层次遍历
算法如下:void LevelOrder(BiTree T){ InitQueue(Q); //初始话辅助队列 BiTree p; EnQueue(Q,T); //将根节点入队 while(!IsEmpty(Q)){ //队列不为空循环 DeQueue(Q ,p); //队头结点入队 visit(p); //访问出队结点 if(p->lchild!=NULL)...原创 2020-03-26 19:00:19 · 355 阅读 · 0 评论 -
二叉树的中序遍历(递归和非递归)
1. 递归void InOrder(BiTree T){ if(T!=NULL){ InOrder(T->lchild); //递归遍历左子树 visit(T); //访问跟结点 InOrder(T->rchild); //递归拜访右子树 }}2. 非递归void InOrder2(BiTree T){ InitStack(S); //初始话栈s Bi...原创 2020-03-26 18:54:03 · 382 阅读 · 0 评论 -
KMP算法求next和nextval
点击链接进入,非常简单:https://blog.csdn.net/lady_killer9/article/details/83934263?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task原创 2020-03-24 20:35:38 · 595 阅读 · 0 评论 -
模式匹配算法
子串的定位操作通常被称为串的模式匹配,它求得是子串(常称为模式串)在主串中得位置。int Index(SString S,SString T){ int i=1,j=1; while(i<S.length && j<=T.length){ if(S.ch[i]==T.ch[j]){ ++i; ++j; //继续比较后面的字符 } else{ ...原创 2020-03-24 19:19:40 · 149 阅读 · 0 评论 -
括号匹配
题目:假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写一个算法来判别表达式中的括号是否配对,以字符"\0"作为算术表达式的结束符。解题思想:括号匹配是栈的经典应用,给出这道题是希望读者好好掌控栈的应用。算法的基本思想是扫描每一个字符,遇到花,中,园的左括号时就进栈,遇到花,中,园的右括号时检查栈顶元素是否为对应的右括号,若是,退栈,否则配对错误。最后栈若不为空也为错误。代码...原创 2020-03-23 14:17:11 · 1112 阅读 · 0 评论 -
Q是一个队列,S是一个空栈,实现将队列中的所有元素逆置
题目:Q是一个队列,S是一个空栈,实现将队列中的所有元素逆置解题思想:由于对队列的一系列操作不可能将其中的元素逆置,而栈可以将入栈的元素逆序提取出来,因此我们可以让队列中的元素逐个地出队列,入栈:全部入栈后在逐个出栈,入队列。算法如下: void Inverser(Stack S,Queue Q){ //本算法实现将队列中的元素逆置 while(!QueueEmpty(Q)){ ...原创 2020-03-21 18:41:24 · 10985 阅读 · 4 评论 -
共享栈的入栈和出栈
题目:设有两个栈s1,s2都采用顺序栈的方式,并共享一个存储区[0,…,maxsize-1],为了尽量利用空间,减少溢出的可能,可采用栈顶向上、迎面增长的存储方式。试设计s1,s2有关入栈和出栈的操作算法。解答:两个栈共享向量空间,将两个栈的栈底设在向量两端,初始时,s1的栈顶指针为-1,s2的栈顶指针为maxsize。两个栈顶指针相邻时为栈满。两个栈顶相向时、迎面增长,栈顶指针指向栈顶元素。...原创 2020-03-20 13:25:23 · 4331 阅读 · 1 评论 -
设计算法判断链表是否中心对称
考研练习第三题题目:设单链表的表头指针为L,结点结构由data和next两个域组成,其中data域为字符型。试设计算法判断该链表的全部n个字符是否中心对称。例如xyx,xyyx都是中心对称。算法思想:使用栈来判断链表中的数据是否中心对称。让链表的前一半元素依次进栈,在处理链表的后一半元素的时,当访问到链表的一个元素时,就从栈中弹出一个元素,两个元素比较,若相同,则将链表的下一个元素与栈中弹出的...原创 2020-03-20 11:36:13 · 5137 阅读 · 13 评论 -
有序的单链表删除重复的元素
考研联系第三题问题:在一个递增有序的单链表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉数值相同的元素,试表中不再有重复元素,例如(7,10,10,21,30,42,42,42,51,70)将变化为(7,10,21,30,42,51,70).算法思想:由于是有序表,所有相同值域的结点都是相邻的。用p扫描递增单链表L,若*p结点的值域等于其后继结点的值域,则删除后者,否则p移向下一个...原创 2020-03-19 16:55:35 · 1458 阅读 · 0 评论 -
将一个带头结点的单链表A分解为两个带头结点的单链表A和B(A中含有序号为奇数的元素,B中含有序号为偶数的元素)
考研习题第二题题目:将一个带头结点的单链表A分解为两个带头结点的单链表A和B,使得A中含有原表中序号为奇数的元素,而B中含有原表中序号为偶数的元素,且保持其相对顺序不变。算法思想:设置一个访问序号变量(初值为0),每访问一个结点序号自动加一,然后根据序号的奇偶数将结点插入A表或B表中。重复以上操作直到表尾。代码如下:LinkList DisCreat_1(LinkList &A){...原创 2020-03-19 12:44:41 · 3530 阅读 · 0 评论 -
按递增次许序输出但单链表中各结点的元素,并释放结点所占的存储空间(不允许使用数组作为辅助空间)
考研练习第一题题目:给定一个带表头结点的单链表,设head为头指针,结点结构为(data,next),data为整型元素,next为指针,试写出下面算法:按递增次许序输出但单链表中各结点的元素,并释放结点所占的存储空间(不允许使用数组作为辅助空间)算法思想:对链表进行遍历,每次遍历找出整个链表的最小值元素,输出并释放结点所占空间:再查找次小值元素,输出并释放空间,如此下去,直至链表为空,最后释...原创 2020-03-18 23:46:35 · 741 阅读 · 2 评论 -
数据结构——头插法和尾插法
头插法和尾插法1.节点的定义2.采用头节点的好处3.采用头插法建立链表该方法从空表开始,生成新节点,并将读取到的数据存放到新节点的数据域中,并将新节点插入到当前链表的表头,即头节点之后。采用头插法建立单链表时,读入数据的顺序与生成的链表中的元素的顺序是相反的。每个节点插入的时间为O(1),设单链表长为n,则总时间复杂度为O(n)。4.采用尾插法建立链表头插法建立单链表的算法虽然...原创 2020-03-15 21:08:58 · 8625 阅读 · 1 评论