
数据结构学习笔记
kdnnnd
这个作者很懒,什么都没留下…
展开
-
数据结构学习第二十六课(归并排序)
归并排序:两个有序数组合并为一个有序数组步骤:1 两个指针分别指向两个有序数组;2 循环遍历并且比较,符合要求的数据存放到最终的内存段中,并且指针后挪;3 直到有一个数组存放完毕,循环结束;4 将没有放完的数组拷贝到最终的内存段中;1 源文件#include<stdio.h>#include<string.h>//归并排序void merge_sort(int* arr, int len);//递归拆分 left:左边一半第一个元素下标,right:右边原创 2021-09-11 23:38:12 · 628 阅读 · 0 评论 -
数据结构学习第二十五课(二分查找)
二分查找:在有序序列中查找,每次忽略一半1 源文件/*测试用值:15 20 32 46 57 77 89 133 456 966*/#include<stdio.h>int halfFind(int* arr, int len, int data);int main(){ int arr[] = { 15 ,20 ,32 ,46 ,57 ,77 ,89 ,133 ,456 ,966 }; int n; int r; while (1) { printf("原创 2021-09-11 23:33:17 · 622 阅读 · 0 评论 -
数据结构学习第二十四课(hush表)
hash表:1 hash三要素:a,数据的范围:数据表示b,合适的hash函数:如科学计数法c,冲突的解决1 源文件#include<stdio.h>#include<iostream>using namespace std;//保存数据的节点struct Node{ struct Node* pNext; int data;};//一个数据:struct Node*struct Hash_table{ struct Node*** arr[10]原创 2021-09-11 23:30:41 · 715 阅读 · 0 评论 -
数据结构学习第二十三课(图)
图:1 数据:顶点2 关系:边3 根据边是否有方向:有向图,无向图4 图的描述:邻接矩阵:一个一维数组保存顶点,二维数组保存边邻接表:一个一维数组保存顶点(链表头结点),链表保存顶点能到达的边5 网图:边不仅仅描述顶点之间的关联,还表达(代价,权重)等;1 源文件//邻接矩阵描述图#include<stdio.h>#include<iostream>#include<queue>using namespace std;#define Vert原创 2021-09-11 23:27:26 · 633 阅读 · 0 评论 -
数据结构学习第二十二课(23树)
1,头文件#pragma once#include <string.h>template<class T>class MyTree{ //内部类 节点类型 struct treeNode{ int count; //标记当前节点是 2节点 3节点 还是4节点 T data[3]; //保存数据 treeNode* pArray[4]; //保存指针 treeNode(){//构造函数 count = 0; memset(data,原创 2021-09-11 23:18:54 · 668 阅读 · 0 评论 -
数据结构学习第二十一课(平衡二叉树)
平衡二叉树/*平衡二叉树:概念:(树中每个节点)左右子树高度差不超过1的有序二叉树;每个节点都先按照有序二叉树的方式来插入:如果不平衡:有四种情况先判断是哪种不平衡的情况,新结点是当前节点的左孩子还是右孩子新节点:pNew当前节点:pCurrent根结点:pRootif(pCurrent==pRoot->pLeft)//当前节点是根结点{if(pNew==pCurrent->pLeft)//新节点是当前节点左孩子{RR();//右旋}else//新节点是当前节点原创 2021-07-16 20:44:10 · 692 阅读 · 0 评论 -
数据结构学习第二十课(寻路算法之A星寻路)
A星寻路#if 1#include<stdio.h>#include<string.h>#include<vector>using namespace std;#define ROW 10#define COL 10#define zxprice 10#define xxprice 14struct Point{ int row; int col; int f;//代价 int g;//已付出 int h;//预计付出 void getF原创 2021-07-14 16:37:29 · 655 阅读 · 0 评论 -
数据结构学习第十九课(寻路算法之广度寻路)
广度寻路#include<stdio.h>#include<vector>using namespace std;#define ROW 12#define COL 12//方向enum dirc { p_up, p_down, p_left, p_right };//描述一个点struct Point{ int row; int col;};//辅助地图结点类型struct pathNode{ bool isFind;//是否走过};//准备原创 2021-07-14 16:36:09 · 632 阅读 · 0 评论 -
数据结构学习第十八课(寻路算法之深度寻路)
寻路算法/*寻路算法:找路径1 深度寻路:不一定能找到最短路径,回退,循环较少,步骤简单,适用于空旷地图;只能走直线2 广度寻路:一定能找到最短路径,不需要回退,循环较多,步骤复杂,适用于较小的复杂地图;只能走直线3 A星寻路:一定能找到最短路径,不需要回退,循环较少,但需要提前设计好代价;只能走斜线*/1,深度寻路1.1头文件#pragma once#include<string.h>template<typename T>class MyStack原创 2021-07-14 16:34:49 · 807 阅读 · 0 评论 -
数据结构学习第十七课(堆)
堆1,头文件#pragma once#include<iostream>using std::cout;using std::endl;//小顶堆template<typename T>class heap{public: heap():pRoot(NULL),len(0),maxLen(0){} ~heap() { pRoot = NULL; len = 0; maxLen = 0; } void insertNode(const T&am原创 2021-07-14 16:31:32 · 593 阅读 · 0 评论 -
数据结构学习第十六课(有序二叉树)
有序二叉树1,头文件#pragma oncetemplate<typename T>class MyTree{private: struct Node { T data;//数据 Node* pLeft;//指向左孩子 Node* pRight;//指向右孩子 }; Node* pRoot;//指向树根public: MyTree(); ~MyTree(); void insertNode(const T& data);//插入一个节点到树中原创 2021-07-14 16:29:30 · 652 阅读 · 0 评论 -
数据结构学习第十五课(无序树)
无序树#pragma once#include<string.h>template <typename T>class MyTree{ //内部类 struct Node { T data;//数据 Node* parent;//指向当前节点的父结点 Node* brother;//指向当前节点的兄弟节点 Node* child;//指向当前节点的子节点 }; Node* pRoot;//指向根结点public: MyTree(); ~MyT原创 2021-07-14 16:27:35 · 445 阅读 · 0 评论 -
数据结构学习第十四课(重要八种排序)(下)
5,箱排序//箱排序/*箱排序思想:按照某种规律,把数据分成若干个箱子装起来,箱子内部(可以用其他排序方式)最后把箱子组合在一起;*/#include<stdio.h>#include<string.h>//数据个数#define NUM 10//数据范围#define AREA 1000//箱子个数#define BOX_SIZE 10void bucket_sort(int* arr, int len);void bucket_sort(int*原创 2021-07-14 16:25:09 · 134 阅读 · 0 评论 -
数据结构学习第十四课(重要八种排序附比较方法)(上)
复杂度/*复杂度分析:用来衡量一个算法是好是坏时间复杂度:单位数据要经过多少次运算,达成目的;空间复杂度:单位数据在整个运算过程中占据了多少空间,(临时空间,恒定空间);*/1,冒泡排序void bubble_sort(int* arr, int len){ int t; for (int i = 0; i <= len-2; i++)//轮数 { for (int j = 0; j <= len-2-i; j++)//每一轮j交换范围 { if (arr[原创 2021-07-14 16:22:12 · 127 阅读 · 0 评论 -
数据结构学习第十三课(C++实现栈)
栈头文件#pragma once#pragma once#include<iostream>using std::cout;using std::endl;template<class T>class MyStack{public: MyStack(); ~MyStack(); //入栈 void push(const T& data); void travel()const; //获取栈顶元素 T getTop()const; //出栈原创 2021-07-14 16:17:30 · 104 阅读 · 0 评论 -
数据结构学习第十二课(动态数组)
1,一维数组#include<stdio.h>int main(){ int arr[10] = { 0 }; int* pArr = arr; for (int i = 0; i < 10; i++) { arr[i] = i + 1; } for (int i = 0; i < 10; i++) { //printf("%d ", arr[i]); printf("%d ", *arr + i); } return 0;}2,二维数组#原创 2021-07-14 16:14:59 · 151 阅读 · 0 评论 -
数据结构学习第十一课(顺序栈)
2,顺序栈2.1链表基本框架typedef int Data;#define INIT_STACK_SIZE 8typedef struct _SeqStack{ Data* base; int capacity; int top;//指向栈顶}SeqStack;2.2创建一个链表//创建一个链表SeqStack* createSeqStack(){ SeqStack* s = calloc(1, sizeof(SeqStack)); assert(s != NULL);原创 2021-02-07 19:53:47 · 107 阅读 · 0 评论 -
数据结构学习第十课(链式栈)
1,链式栈1.1链表基本框架typedef int Data;typedef struct _Node{ Data data; struct _Node* next;}Node;typedef struct _LinkStack{ int size; Node* front;}LinkStack;1.2创建一个链表//创建一个链表LinkStack* createLinkStack(){ LinkStack* s = calloc(1, sizeof(LinkStack)原创 2021-02-07 19:52:45 · 132 阅读 · 0 评论 -
数据结构学习第九课(顺序队列)
2,顺序队列2.1链表基本框架#define INIT_QUE_SIZE 8typedef int Data;typedef struct _SeqQueue{ Data* base; int capacity; int size; int front;//队头 int rear;//队尾}SeqQueue;2.2创建一个队列//创建一个队列SeqQueue* createSeqQueue(){ SeqQueue* que = calloc(1, sizeof(SeqQue原创 2021-02-07 19:50:34 · 107 阅读 · 0 评论 -
数据结构学习第八课(链式队列)
1,链式队列规则:先进先出;1.1链表基本框架typedef int Data;typedef struct _Node{ Data data; struct _Node* next;}Node;typedef struct _LinkQueue{ int size; Node* front; Node* tail;}LinkQueue;1.2创建一个队列LinkQueue* createLinkQueue(){ LinkQueue* que = calloc(1原创 2021-02-07 19:49:14 · 113 阅读 · 0 评论 -
数据结构学习第七课(链表和函数指针结合)
4,链表和函数指针结合4,1输出(可以转换输出任意类型的数据)typedef int Data;//可以改数据类型typedef void (*PFUNC)(Node*);//函数指针void transfrom(DuList* list,PFUNC func)//回调函数{ if (empty(list)) { return; } Node* curNode = list->front->next; while (curNode!=list->front) {原创 2021-02-07 13:15:34 · 189 阅读 · 0 评论 -
数据结构学习第六课(循环链表)
3,循环链表3.1创建一个循环链表DuList* createDuList(){ DuList* list = calloc(1, sizeof(DuList)); assert(list != NULL); //创建头结点 list->front = calloc(1, sizeof(Node)); assert(list->front != NULL); list->tail = list->front;//让头指针和尾指针都指向头结点 list->原创 2021-02-07 12:44:39 · 125 阅读 · 0 评论 -
数据结构学习第五课(双向链表)
2,双向链表2.1双向链表基本框架typedef int Data;typedef struct _Node{ Data data;//数据域 struct _Node* next;//后继指针--指向下一个结点 struct _Node* prev;//前驱指针--指向上一个结点}Node;//结点typedef struct DoubleList{ int size;//当前结点数量 Node* front;//指向头结点的指针 Node* tail;//指向尾结点的指针}D原创 2021-02-07 12:42:30 · 114 阅读 · 0 评论 -
数据结构学习第四课(线性表之单链表(升级版(再封装)))
线性表之单链表(升级版(再封装))typedef int Data;typedef struct _Node{ Data data; //数据域 struct _Node* next;//指向后继节点的指针}Node;typedef struct _List{ int size;//记录当前节点数量 Node* front;//指向头结点的指针; Node* tail;//指向尾结点的指针;}List;//创建一个链表List* createList(){ List* li原创 2021-02-06 20:20:13 · 107 阅读 · 0 评论 -
数据结构学习第三课(线性表之链表)
第三课1,有头单链表1.1链表的概念链表和顺序表都是线性表的一种,但是链表的每个数据的存储是不连续的;每个元素如何连接,需明白,在基本单位结构体中分为两种数据,分别是数据域和指针域,是由每个基本单位结构体的指针域指向下一个位置的地址,从而将它们连接起来,链表在内存空间中数据存储的位置的特点是分布离散的、随机的;它们就像串珠子一样一个接一个的线性结构;基本框架事例:typedef int Data;typedef struct _Node{ Data dara; //数据域 struct原创 2021-02-06 20:17:12 · 179 阅读 · 0 评论 -
数据结构学习第二课(线性表之顺序表)
第二课1,线性结构1.1线性结构的特点前提:在数据元素的非空有限集合中·存在唯一的一个被称为“第一个”的数据元素;·存在唯一的一个被称为“最后一个”的数据元素;·除了第一个之外,集合中每个数据元素均只有一个前驱;·除了最后一个之外,集合中每个数据元素均只有一个后继;1.2线性结构功能线性是一个灵活的数据结构,它的长度可以根据需要增长或缩短,即对线性表的数据元素不仅可以进行访问,还可以进行插入和删除;2,顺序表2.1定义顺序表是指用一组地址连续的内存单元依次存储线性表的数据元素;2.原创 2021-02-06 11:27:40 · 117 阅读 · 0 评论 -
数据结构学习第一课(数据结构概述)
第一课1,概念:数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科;(数据结构就是把数据元素按照一定的关系组织起来的集合,用来组织和存储数据);2,数据结构分类:数据结构分为逻辑结构和物理结构;3,逻辑结构:3.1定义:逻辑结构是从具体问题中,抽象出来的模型,是抽象意义上的结构,按照对象中数据元素之间的相互关系分类;3.2分类:3.2.1集合结构:集合结构中数据元素除了属于同一集合外,它们之间没有其他关系;3.2.2线性结构:线性结构中的原创 2021-02-06 11:25:42 · 375 阅读 · 0 评论