数据结构之线性表
动态数组,链表,栈,队列...
Binary Oracle
一名热爱开源和技术的Coder , 开源框架spring committer , golang开源网络库netpoll committer; (脱产备战25考研中,停更一年)
展开
-
向量类模板的声明和实现---扩充版本
Vector.hpp#pragma once#include<cstdlib>#define SPACE_MAX 16 //表示数组的最小长度template<class T>class Vector{private: T* data;//维护动态数组的指针 int size;//数组的数据元素的个数 int max;//当前数组最大能容纳的元素个数 void Error(const char* cs)const { cout << cs <原创 2021-04-27 18:10:59 · 746 阅读 · 0 评论 -
容器适配器之stack,queue和优先级队列---基于List实现的链栈,链队列,优先级队列
List容器的c++代码实现适配器:以某种既有的容器作为底部结构,定义新的接口,使之成为具有某种特殊用途的容器,这种具有新接口的容器称为适配器。链栈:#include"List.hpp"template<class T>class Stack{private: List<T> stackL;//链表public: stack(){} ~stack() {}; //求数据元素个数 int size()const { return stackL.Size(原创 2021-04-26 21:18:04 · 293 阅读 · 0 评论 -
双向链表的类模板的实现
List.hpp/***************Node结点的定义************/template<class T>struct Node{ T data; Node<T>* prev, * next; Node(T d = 0,Node<T>* p = NULL,Node<T>* n=NULL):data(d),prev(p),next(n){}};/***************迭代器的定义*********原创 2021-04-26 09:42:33 · 713 阅读 · 1 评论 -
银行排队模拟(离散事件模拟)
1.银行排队模拟程序简介:2.算法所需要的数据结构和相当解释说明3.事件算法运行时的某个状态初始化生成随机数后要做的事情原创 2021-03-10 21:58:22 · 1525 阅读 · 1 评论 -
链式队列---c++版本
尾插头删因此这里选择有头节点的链式队列注意:在进行删除元素的过程中,当进行到最后一个节点的删除时,要将rear指回头结点,不然rear为也指针因为删除完最后一个有效节点时,rear为野指针,并且按理rear应该指向队列的尾部,此时队列头尾重合,所以要把rear指向头结点main.cpp#include<iostream>using namespace std;#include"s.hpp"//测试代码------------------------void test()原创 2021-03-09 12:57:51 · 229 阅读 · 0 评论 -
循环队列---c++版本
原先操作改进版本:假溢出解决方法:如何实现循环队列判断循环队列为空判断循环队列为满存在问题:队空和堆满的判断条件重复解决方法:这里选择第二种方法:循环队列类的定义入队操作出队操作读取队头元素注意:总结:当进行元素删除操作后,从front位置开始后一个元素,直到rear部分是当前数组中存储的有效数据(左开右闭,从左到右)front从左边开始的元素一直到rear为剩余数组中可用的空间front位置的元素空间无法访问,被浪费掉了queue.hpp原创 2021-03-08 13:27:41 · 320 阅读 · 0 评论 -
迷宫算法(DFS)
1.如果采用堆栈进行迷宫探测,则称之为深度优先搜索(DFS),它和递归的探测思路是基本一致的,可以看成是递归方式的非递归版本;2.采用队列进行迷宫探测,则是广度优先搜索(BFS),广度优先搜索法利用队列的特点,一层层向外扩展查找可走的方块,直到找到出口为止,最先找到的这个答案就必然是最短的。如果打比喻来说,DFS更适合模拟机器人走迷宫的方式,看到一个方向是通的,就一直走下去,遇到死胡同就退回;BFS则好比一个人站在迷宫入口处,拿出一堆小探测器,每个小探测器帮他搜索一个可能的路径去寻找,第一个找到出口的原创 2021-03-07 21:11:11 · 13768 阅读 · 5 评论 -
栈的链式存储--c++版本
通过类中的top指针就可以操作整张链表原创 2021-03-07 13:43:26 · 198 阅读 · 0 评论 -
双端堆栈(两栈共享存储空间)
c++写法:stack.hpp#include<iostream>#include<string>#include<cstdlib>using namespace std;#define MAX 100//双端堆栈:一个是数组前面,一个从数组后面算起template<class Data>class stack {private: int size;//栈的大小(不是栈中当前元素个数) int top1;//第一个栈中的栈顶,可以理..原创 2021-03-06 21:57:04 · 604 阅读 · 0 评论 -
类模板实现顺序栈
存在的问题:解决方法1:c++类模板在分文件编写时存在的问题解决方法2:下面是第二种方法的演示代码:main.cpp#include<iostream>#include<string>#include<cstdlib>using namespace std;#include "标头.h"//测试代码--------------------------------void test(){ //测试 double p[3] = { 1,2,..原创 2021-03-06 19:15:10 · 386 阅读 · 0 评论 -
异常捕获优化c++写的顺序栈
1. 如果try语句里面的语句都没有出现异常,就会执行catch后面的代码块2.try语句里面存在语句抛出异常,会去下面的catch块中寻找抛出异常类型相同的语句块3. try语句抛出异常,但是下面的catch语句块中没有一个能够捕获该异常,那么会跳转到catch下面的语句,造成程序的终止,因为异常没有被解决会丢出异常的情况自定义异常类异常捕获优化c++写的顺序栈#include<iostream>#include<string>#include<c.原创 2021-03-06 17:41:32 · 214 阅读 · 0 评论 -
c++代码实现栈的顺序存储
#include<iostream>#include<string>#include<cstdlib>using namespace std;//定义栈的最大值常量const int MAX = 1024;//c++实现顺序栈class stack {private: //用一个void**的指针指向一个存放void*类型指针的数组 void** data; //用来指向栈的数组 int size; ///栈的大小 int top; //栈顶:当原创 2021-03-06 14:36:00 · 489 阅读 · 0 评论 -
队列的链式存储
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<memory.h>//节点结构体struct node{ //只维护指针域 node* next;};//队列结构体struct queue{ //头节点 node pheader; //队列的长度 int size; //记录链表尾部的指针 node* ptail;};//隐藏qu.原创 2021-03-03 14:23:15 · 126 阅读 · 0 评论 -
队列基本概念和顺序式存储实现
队列的基本概念队列的顺序存储原创 2021-03-03 13:00:43 · 637 阅读 · 0 评论 -
栈的应用案例---就近匹配
就近匹配算法思路在这里插入代码片总结分文件编写stack.h#pragma once#define _CRT_SECURE_NO_WARNINGS#include<stdlib.h>#include<string.h>#define MAX 1024//栈:注意和动态数组的区别://动态数组这里用的指针是二级指针因为数组的大小无法提前确定,并且用户数组类型无法确定,要用void*一级指针来接收//所以要在堆区动态开辟数组存放void*类型数据要用二级原创 2021-03-03 09:42:41 · 190 阅读 · 0 评论 -
栈的链式存储
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 1024//节点的结构体struct stackNode { //只维护指针域 stackNode* next;};//栈的结构体struct lstack { //这里头节点不写成指针形式,是因为栈的结构体会开辟在堆区 //如果头节点用指针形式表示,.原创 2021-03-03 08:32:33 · 122 阅读 · 0 评论 -
栈
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 1024//栈:注意和动态数组的区别://动态数组这里用的指针是二级指针因为数组的大小无法提前确定,并且用户数组类型无法确定,要用void*一级指针来接收//所以要在堆区动态开辟数组存放void*类型数据要用二级指针来接收//这里的栈已经知道数组的最大长度,因此..原创 2021-03-02 20:28:12 · 174 阅读 · 0 评论 -
企业级链表设计思路
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>//节点结构体struct LinkNode { LinkNode* next;//指针域};//链表结构体struct LList { LinkNode pHeader;//头节点结构体 int size;//链表长度};//取个别名typedef void* LinkLi.原创 2021-03-01 13:01:38 · 175 阅读 · 0 评论 -
链表的清空和返回长度
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>//节点结构体struct LinkNode { void* data;//万能指针接收用户输入的不同类型数据 LinkNode* next;//指针域};//链表结构体struct LList { LinkNode pHeader;//头节点结构体 int size;//链表长度原创 2021-02-28 22:10:17 · 365 阅读 · 0 评论 -
线性表之链表---初始化,插入,删除
与之前链表不同,这里的链表可以适合不同的数据类型存储#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>//节点结构体struct LinkNode { void* data;//万能指针接收用户输入的不同类型数据 LinkNode* next;//指针域};//链表结构体struct LList { LinkNode pHeader原创 2021-02-28 20:06:11 · 548 阅读 · 1 评论 -
动态数组的删除和销毁功能实现
动态数组的删除#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>struct person { char name[32]; int age;};void print(void* data){ person *p = (person*)data; printf("姓名:%s\t年龄:%d\n", p->name, p->原创 2021-02-28 16:13:48 · 1472 阅读 · 0 评论 -
线性表之动态数组
动态数组的初始化#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>//动态数组的初始化struct dynamicArray { void** pAddr; //维护真实在堆区开辟的数组的指针 int capicity; //数组的容量 int size; //数组大小};//初始化数组dynamicArray* init_Array(int capicity){ if.原创 2021-02-28 14:14:56 · 244 阅读 · 0 评论