![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
GXM.
美赛F、Mathorcup一等、计设国一得主
现研究NLP领域,图网络、GPT等学习ing
展开
-
数据结构之——队列讲解
队列⚪讲解▲ 队列是一种特殊的线性表,只能在头尾两端进行操作△ 队尾(rear):只能从队尾添加元素,一般叫做enQueue,入队△ 队头(front):只能从队头移除元素,一般叫做deQueue,出队△先进先出的原则,First In First Out ,FIFO⚪接口设计int size(); //元素的数量bool isEmpty(); //是否为空void enQueue(E element); //入队E deQueue(); //出队E front(原创 2020-09-26 17:10:23 · 472 阅读 · 1 评论 -
数据结构之——栈讲解
栈⚪▲栈是一种特殊的线性表,只能在一端进行操作△往栈中添加元素的操作,一般叫做push,入栈△ 从栈中移除元素的操作,一般叫做pop,出栈(只能移除栈顶元素,也叫做:弹出栈顶元素)⚪接口设计int size(); //元素的数量bool isEmplty() //是否为空void push(E element) //入栈E pop() //出栈E top() //获取栈顶元素 栈的内部元素可以直接利用之前学过的数据结构:动态数组、链表因为栈最频繁的操作原创 2020-09-26 16:42:02 · 359 阅读 · 0 评论 -
数据结构之——双向循环链表完备版(C++实现)
双向循环链表⚪介绍双向循环链表只是在双向链表的基础上增加了头尾节点的互相指向⚪难点讲解双向循环链表,只需要引用之前的双向链表代码的基础上部分功能进行修改因为只对头尾节点进行了相互指向,因此只有添加、删除的函数的头尾部分需要进行修改添加先观察原来的双向链表void DouLinkList<E>::add(int index, E element) //在某节点添加元素{ if (index == size) //在尾节点添加元素 { Node<E> *Ol原创 2020-09-26 16:21:36 · 409 阅读 · 0 评论 -
数据结构之——单向循环链表完备版(C++实现)
#pragma once#pragma once#include <iostream>using namespace std;template<class E>class Node{public: E element; //元素值 Node<E>* next; //指向下一个节点 Node() {}; //不含参数的构造函数 Node(E element, Node<E>* next) //含参数的构造函数 { th原创 2020-09-23 21:25:21 · 800 阅读 · 0 评论 -
数据结构之——双向循环队列完备版(C++实现)
循环双端队列实际上就是是在之前单向的循环队列的基础上可以进行两端添加、删除操作的循环队列,因此我们在函数中增加了头部入队和尾部删除。而对于队尾元素没必要再设置一个变量,因为尾部的变量直接可以用front+size下面是 Circle_Double_Queue.h的代码。#pragma once#include <iostream>using namespace std;template <class E>class Circle_Double_Queue{ pri原创 2020-08-09 22:09:19 · 785 阅读 · 0 评论 -
数据结构——二叉搜索树完备版(C++)
二叉搜索树C++实现细致讲解了添加、遍历、求高度、判断是否为完全二叉树、删除节点的方法对二叉搜索树进行了完备的代码实现原创 2020-08-07 11:32:25 · 646 阅读 · 2 评论 -
数据结构之——单向循环队列完备版(C++实现)
数据结构——单向循环队列完备版(C++实现)我看了一下网上C++实现的队列大都是用之前所学的链表来实现,因为不用考虑内存溢出问题,其实单向的队列主要功能是队尾入队和队头出队,是在头和尾实现,若是没有循环在队头这一块的处理动态数组的复杂度为O(n),而链表是O(1),当然选用链表来实现。但是当将动态数组优化使其循环,可做到几乎所有功能的平均复杂度都可以做到O(1)。其实单向循环队列比较好的地方主要是可以最大化的使用动态数组的空间,不必像之前的动态数组一样删除头部元素后方所有元素都要跟着移动,只需要将头节点原创 2020-08-05 19:36:34 · 831 阅读 · 2 评论 -
数据结构之——双向链表完备版(C++实现)
近期正在自学数据结构,就用一些比较简单的语言来实现其中的算法其实对于单向链表来说双向链表只是在其中增添的指向前一个节点的指针,所以在增加和删除节点的时候要对头尾节点着重考虑其特殊性,要单独处理,这里代码的主要问题依旧是void print()函数的处理,可能展示出来不是很美观,如果有什么好的建议可以在下方的评论区给出指点下面展示 Dou_LinkList.h代码。#pragma once#include <iostream>using namespace std;template&原创 2020-08-04 13:21:44 · 402 阅读 · 1 评论 -
数据结构之——单向链表完备版(C++实现)
近期正在自学数据结构,就用一些比较简单的语言来实现其中的算法对于单向链表主要的就是节点和元素的储存以及之间的关系,下面我用C++语言将链表中所有基础的内容实现了一遍,相对于其它代码,下方代码在封装和功能上都比较完备,对于几个特殊位置的处理也算是比较完善,做的不太好的地方就是对于动态数组的删除没有做好,尝试了很多次也没有找到比较好的方案,如果谁有比较好的方法,可以在下方评论区给出参考。下面展示 Array_List.h代码。#pragma once#include <iostream>u原创 2020-08-04 12:50:17 · 322 阅读 · 0 评论 -
数据结构之——动态数组完备版(C++实现)
对于数据结构,我们首先学的就是动态数组,我看了一下网上的大多数的动态数组的实现,我发现动态数组的创建不够优化、很多功能不够齐全,而且对于动态扩容这方面做的不够好。此处我用C++分文件实现此动态数组并且完成了测试。下面展示一些 `内联代码片`。首先是在// An highlighted blockvar foo = 'bar';...原创 2020-08-04 12:14:27 · 473 阅读 · 0 评论