![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
虽迟但到灬
一起快乐的努力
展开
-
队列:先入先出的数据结构讲解
队列的结构模型先进先出队列的实现:为了实现队列,我们可以使用动态数组和指向队列头部的索引。如上所述,队列应支持两种操作:入队和出队。入队会向队列追加一个新元素,而出队会删除第一个元素。 所以我们需要一个索引来指出起点。代码如下:#include <iostream>class MyQueue { private: // store elements vector<int> data; // a p原创 2022-02-07 21:15:05 · 832 阅读 · 0 评论 -
动态规划基础
动态规划基础:背包问题打家劫舍股票问题子序列问题在处理动态规划类的问题时应该注意哪几点:区分dp数据以及下标的实际含义递推公式。我们还要想到:dp数组如何初始化。遍历顺序例如背包问题:for(;????。 //背包for(;????. //物品递推公式打印dp数组总结出来五步分析法:1.dp数组以及下标的含义2.递推公式3.dp数组如何初始化4.遍历顺序5.打印dp数组...原创 2022-01-20 09:56:12 · 241 阅读 · 0 评论 -
算法专题(一)1.1 希尔排序,快速排序
对于我们这个算法,要明确算法实现函数的参数,明确了参数,知道要对什么做操作,将使得你的思路和题解豁然开朗。所以针对一些普遍的情况,我们设想要对自己的样本的集合,以及样本长度做好规划,也即做了参数。看如下代码:int shell_sort(int *data ,int length){ int gap = 0; int i=0,j=0; for(gap = length/2;gap >=1;gap/=2). //分组的次数 { for(i = gap;i<length;i+原创 2022-01-08 18:27:43 · 265 阅读 · 0 评论 -
数据结构专题(二):2.7顺序表反转
思想:单链表中体现数据结构学习中的一个重要的算法操作思想。就是要学习这些数据元素的联系规律,如何传递结点中的next域,在单链表中,有且只有一个作用记录了联系,这个就是当前结点的next存储了下一个结点的地址。结论:只要我们在设计这些元素运动的重复过程(写循环),这些元素的相对位置不发生变化,那么这个过程就是可以重复的。 如下代码:使用两种方法进行顺序链表的转换。#include <stdio.h>#include <stdlib.h>//链表中节点的结构typede原创 2022-01-02 20:23:33 · 302 阅读 · 0 评论 -
数据结构专题二:2.6链表删除结点
///删除,删除指定位置的值,或者删除给定的值//情形一:删除指定结点的后继结点//情形二:删除第i个结点,假定头结点的i=0//删除返回这个目标结点的地址,并不涉及到动态空间的回收//在动态回收空间的要求中,应该遵循的原理是谁污染,谁治理//在顺序表中的删除就是逻辑上的删除,也就是说我们的这个结点不再存在于当前的顺序表中了///删除结点 :Ptr是需要删除的结点,将删除ptr的后继节点 LinKListNode *delete_After_LkList(LinKListNode *ptr)原创 2021-12-31 16:42:33 · 553 阅读 · 0 评论 -
数据结构专题(二):2.5在链表指定位置插入元素
如下代码:///插入元素,在指定位置插入给定的值//在指定位置之后插入void insert_After_LkList(LinkListNode *ptr,ElemType x){ LinkListNode *s; s = (LinkListNode *)malloc(sizeof(LinkListNode)); s->data = x; s->pNext = ptr->pNext; ptr->pNext = s; } //.原创 2021-12-31 11:35:30 · 1555 阅读 · 0 评论 -
数据结构专题(二):2.4链表的插入操作,头插法
头插法一:思想如下图:如下代码:///头插法建立单链表LinkListNode *Create_Front_Lklist(ElemType arr[],int length){ LinkListNode *pHead,*p,*q; int i; pHead = (LinkListNode *)malloc(sizeof(LinkListNode)); pHead->pNext = NULL; q = pHead->pNext; /.原创 2021-12-29 22:50:43 · 345 阅读 · 0 评论 -
数据结构专题(二):2.3链表插入元素,尾插法
因为结构内存的差异,所以有头插法和尾插法两种形式。本章博客主要讲解头插法操作流程如下图如下代码:///插入元素,在指定的位置插入给定的值//因为链表这种结构的内存是由程序员管理的,因此他的建立有一定的运算方法//尾插法建立单链表(将逻辑上的顺序表放入单链表的物理结构当中)/*顺序表:12,33,44,76,89,90(逻辑上的顺序表)=>单链表本例中我们用数组表示这种顺序表*///arr:传入的顺序表,length:顺序表的长度LinkListNode *create_Re.原创 2021-12-28 22:49:18 · 963 阅读 · 0 评论 -
数据结构专题(二):2.2单链表与顺序表,求元素个数,取值与查找
先了解一下头结点:头结点本身并不存在链表里面的元素信息,我们用头结点的目的是方便以后将所有元素全部找起来。如下代码分别对应求个数,取值,查找注意:取值的函数第二个参数是位置查找的函数第二个参数是给定的元素值。(前提是我们知道了链表每个节点存的数据类型)#include "LinkList.h"///创建带有头结点的链表InitLinkListNode *InitLinkList(void){ LinkListNode *pHead = NULL; pHead = (Link原创 2021-12-28 22:11:38 · 1373 阅读 · 0 评论 -
数据结构专题(二):2.1单链表与顺序表的关系
先来看看单链表的结构设计由上图可知,链表可以看作有以下两部分组成,数据域和链域(联系域),链域用来确定每个节点的的后继。如下代码:h文件#pragma once #include <stdio.h>#include <stdlib.h>#define TRUE 1#define FALSE 0//定义节点typedef struct node{ int data; struct node *pNext;}LinkListNode;原创 2021-12-27 23:21:59 · 454 阅读 · 0 评论 -
数据结构专题(一):1.3.顺序表插入删除
如下代码://插入元素:在指定的位置插入给定的值//插入的位置为K:0 -- n-1//顺序表:不满//pList:目标顺序表,x待插入的元素,k插入的位置int InsertElemSqList(SequenList *pList,ElemType x,int k){ int j; //顺序表尚未填满 if(pList->last >= LIST_SIZE-1) return FALSE; if(k<0||k> (pList->last+1)) r原创 2021-12-26 21:52:38 · 992 阅读 · 0 评论 -
数据结构专题(一):1.2.求元素个数,取元素与定位
如下代码:求数组长度int GetSizeSeq(SequenList *pList){ return pList->last; //最后只需知道last的值就好}进行数组中元素的读取和查找。//取元素:取给定位置的元素值///pList:目标的顺序表,pos:获取元素的下表,e:将元素值放入int GetElemSqlist(SequenList*seqenList,int pos,ElemType *e){ if(pos <0 || pos > pList->原创 2021-12-26 18:40:29 · 681 阅读 · 0 评论 -
数据结构专题(一):1.1顺序表初始化
顺序表有以下特性:(1)初始化(2)增删改查(3)遍历读取如下代码:头文件.h#pragma once#include <stdio.h>#include <stdlib.h>typedef int ElemType; //假定线性表的元素类型为整型,方便以后转换类型#define LIST_SIZE 1024//假定我们的线性表长度是1024typedef struct{ ElemType data[LIST_SIZE]; int last;原创 2021-12-26 18:15:38 · 702 阅读 · 0 评论 -
数据结构专题:绪论
1.数据结构的三个要素2.数据结构与程序性能衡量大O的工程意义,在我们的游戏,经常会看到这个游戏运行的 最低配置:CPU不小于2G,内存不小于4G,硬盘空间30G。当你的结论没有数字来支撑,往往显得苍白无力。看如下图例子:...原创 2021-12-25 20:01:23 · 1971 阅读 · 0 评论 -
数据结构专题:数据结构的学习困境
人们无法理解他没有经历过的事情1.如何实现从数据结构的概念到程序实现的跨越。2.如何实现从实际应用到数据结构抽象的跨越。即1.如何实现一个数据结构2.如何利用数据结构来解决实际问题数据结构核心问题:什么才能够自动化,什么才能够有效自动化。如何将人的思维和例和计算机结合起来。计算机解决问题的过程:所谓程序涉及就是信息的抽象。...原创 2021-12-25 18:16:58 · 131 阅读 · 0 评论 -
全排列STL的实现
问题:给定一个字符串,实现他的全排列,如”abc"全排列为abc,acb,bac,bca,cab,cba.细究,就可以将其理解为一中递归思想。f(abc)=a+f(bc),f(bc)=b+f©,f©=c;下文给出两种解决放大。一个用相对比较古老的两数交换的C语言方法,一个用到STL两种算法。如下代码void swap(char* a, char* b){ char temp = *a; *a = *b; *b = temp;}void Permutation(char* pStr, c原创 2021-11-26 17:12:07 · 366 阅读 · 0 评论 -
递归算法详解
先从数学角度分析下递归:数学归纳法是证明当n等于任意一个自然数时,某命题成立。证明步骤分两步。一:当n=1时命题成立二:假设当n=m时命题成立,那么可以推导出在n=m+1时命题也成立(m为任意自然数)先给出概念:递归的背后逻辑就是数学归纳法。看下下面的斐波那契数列:1 1 2 3 5 8 13 21 34从第三位开始,每一位数字时前两位数字之和。所以根据上面的数学归纳法我们可以得到下面的两个公式:Fib(n) = 1 n=0,1(计算机中默认index都是从0开始为第一位)Fib(n原创 2021-11-20 17:04:10 · 1342 阅读 · 0 评论 -
顺序查找算法C语言实现
顺序查找算法实现思想:静态查找表用顺序存储结构表示时,顺序查找的查找过程为:从表中的最后一个数据元素开始,逐个同记录的关键字做比较,如果匹配成功,则查找成功;反之,如果直到表中第一个关键字查找完也没有成功匹配,则查找失败。应用场景:顺序查找一般理解为线性查找,一般针对数组或是链表,针对线性的数据存储结构实现,是最简单的查找算法。下面通过自己建立一个顺序表来进行数据查找。构建完整程序并进行代码逻辑分析。typedef struct { keyType key;//查找表中每个数据元素的值,注意原创 2021-10-23 20:07:44 · 10164 阅读 · 0 评论