C++与数据结构
C++与数据结构
WGS.
道阻且长,与君共勉:你若对得起时间,时间便会对得起你。
展开
-
图的广度优先搜索遍历
核心代码int sign2[MAX];//广度优先搜索遍历void BFS(MGraph G, int v){ cout<<G.vertex[v]<<" "; sign2[v] = 1; queue<int> q;//系统队列 q.push(v);//已被访问过结点下标入队 while(!q.empty()){ int w = q.fron...原创 2020-02-10 18:51:07 · 462 阅读 · 0 评论 -
标记矩阵实现图的深度优先搜索
图的深度优先搜索遍历(DFS)类似于二叉树的先序遍历。基本思想:首先访问出发点A,并将其标记为已访问过,然后选取与A邻近的并且未被访问过的任意一个顶点,比如D,访问它并且标记为已访问过;再选取与D邻接的未被访问的任意顶点,以此重复进行。当一个顶点所有的邻接顶点都被访问过时,则依次退回到最近被访问过的顶点,若该顶点还有其他啊邻近顶点未被访问,则从这么未被访问过的顶点中选取一个那个重复上述过程,直至...原创 2020-02-10 17:17:07 · 439 阅读 · 0 评论 -
关于二叉排序树的平均查找长度的计算
查找成功的情况下:第一层结点:一个 查找了一次第二层结点:二个 每个查找两次第三层结点:四个 每个查找三次第四层结点:二个 每个查找四次所以查找成功情况下的平均查找长度是:查找失败的情况下:查找失败情况下的平均查找长度是:...原创 2020-02-10 14:41:29 · 31322 阅读 · 5 评论 -
图---查找顶点是否存在、增加顶点、增加边
#include <iostream>using namespace std;#define MAX 50#define INFINITE 32767//图的邻接矩阵表示 struct MGraph{ int vertexnum; //顶点的数量 int edgenum; //边的数量 char vertex[MAX]; //存储顶点的数组 int e[MAX][M...原创 2020-02-09 13:30:49 · 1281 阅读 · 0 评论 -
图的邻接矩阵表示
#include <iostream>using namespace std;#define MAX 50#define INFINITE 32767//图的邻接矩阵表示 struct MGraph{ int vertexnum; //顶点的数量 int edgenum; //边的数量 char vertex[MAX]; //存储顶点的数组 int e[MAX][M...原创 2020-02-09 10:28:08 · 314 阅读 · 0 评论 -
C++ 用系统栈stack实现括号匹配
#include <iostream>#include <stack>using namespace std;stack<char> st;bool khpp(string str){ char temp; for(int i=0; i<str.length(); i++){ switch(str[i]){ //左括号进栈 ...原创 2020-02-06 14:45:35 · 412 阅读 · 0 评论 -
单链表L是一个递减有序表,试编写一个高效算法,删除表中值大于min且小于max的结点
#include <iostream>using namespace std;template<typename T> class Node{ public: T data; Node* next; public: //初始化 Node(){ this->next = NULL; this->data = 0; } ...原创 2020-02-05 14:43:30 · 7030 阅读 · 0 评论 -
已知一个单向链表,试给出复制该链表的算法
#include <iostream>using namespace std;template<typename T> class Node{ public: T data; Node* next; public: //初始化 Node(){ this->next = NULL; this->data = 0; } ...原创 2020-02-05 14:42:06 · 3273 阅读 · 0 评论 -
C++ 快速排序
以枢轴为中心的交换排序设计思路:1.选择第一个元素作为基准2.用两个探头i和j作为下标分别指向序列的头和尾3.探头往里探,当j的元素比基准元素小时,跳出循环,判断探头i 4.当i的元素比基准元素大时, 交换两个探头的元素5.当i>j的时候,说明探头工作结束,即i==j的时候,两个探头移到一起,这时交换基准和i的值6.递归调用,左面和右面#include <io...原创 2020-01-11 18:36:51 · 340 阅读 · 0 评论 -
C++ 希尔排序
两个49在排序前后位置颠倒了,所以希尔排序是不稳定的希尔排序是基于插入排序的以下两点性质而提出改进方法的:1.插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。2.但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记...原创 2020-01-10 20:11:42 · 1123 阅读 · 0 评论 -
C++ 直接插入排序
设计思路:1.首先把一个元素的第一个数看作一个有序的数列2.定义一个游动的下标,指向有序序列中的最后一个元素2.从有序序列后一个元素开始,往前比较,如果待比较元素比前一个元素小的话,额外用变量盛着待比较元素, 前一个元素后移一位 ,游标减减(此时权当游标+1的位置已经空出)。大的话,游标加一的位置即要插入的位置#include <iostream>using names...原创 2020-01-10 20:07:08 · 244 阅读 · 0 评论 -
二叉排序树的创建
#include <iostream>using namespace std;//二叉排序树创建时候并不要求是有序的,如果是有序的将会成单支树(平衡二叉树可以调整) struct BTN{ int data; BTN* lchild; BTN* rchild;};//二分搜索BTN* bsts(BTN* r, int key){ if(r == NULL){...原创 2020-01-09 20:14:46 · 3072 阅读 · 0 评论 -
根据先序和中序创建二叉树
#include <iostream>using namespace std;//链式存储 struct BTNode{ char data; BTNode *lchild;//左子树 BTNode *rchild;//右子树 };//创建二叉树BTNode* CBT(string pre,string in){ BTNode* T = new BTNode...原创 2020-01-09 19:40:49 · 1110 阅读 · 0 评论 -
树的基本术语
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YpKDAevR-1578374949572)(3F27D9D06A904C03813B4F65C670FC31)]结点:A、B、C等都是结点,结点不仅包含数据元素,而且包含指向子树的分支。例如:A结点不仅包含数据元素A,而且还包含三个指向子树的指针。结点的度:结点拥有的子树个数或者分支的个数。例如:A结点有3...原创 2020-01-07 13:29:17 · 265 阅读 · 0 评论 -
C++ 递归实现一个数的各项阶乘之和
#include <iostream>using namespace std;//前n项阶乘int getjj(int n) { if(n==0 ||n==1) { return 1; } return n*getjj(n-1);}//各项阶乘和int fun(int n) { //0的阶乘是0 if(n==0 || n==1) { return 1;...原创 2020-01-06 16:02:22 · 627 阅读 · 0 评论 -
C++ 链队
字画草图:这里头尾指针是指针并不是普通队列的下标。动态分配内存空间,所以不存在假溢出问题,也就不用循环队列#include <iostream>using namespace std;/* 入队: 判断是否为空,即front为空,若为空,头尾指针指向插入元素 不为空,移动尾指针插入即可 出队; 判断是否为空 不为空则判断是否为队中的最后一个元素...原创 2020-01-05 20:24:40 · 257 阅读 · 0 评论 -
C++ 链栈
自画草图:设计思路:栈是现今后出所以压栈才用头插法出栈也从头结点下一个节点开始,即第一个节点#include <iostream>using namespace std;template<typename T> class Node{ protected: T data; Node* next; public: //初始化 带头结点单链表...原创 2020-01-05 19:51:43 · 356 阅读 · 0 评论 -
C++俩队实现栈
自画草图:设计思路:1.q1入队2.q1出队,除了队尾元素,出队的元素到入队q2中,q1队尾元素出队,即为弹栈3.再调换两队,执行同样操作,直到q1队为空队#include <iostream>#include<queue>//系统队 using namespace std;class MyStack{ public: queue<int&...原创 2020-01-05 19:20:04 · 190 阅读 · 0 评论 -
C++ 俩栈实现队列
自画草图:4 3 2 1向s1压栈s1弹栈,元素为1 2 3 41 2 3 4压向s2s2弹栈为4 3 2 1即符合队的特征先进先出设计思路:1.s1栈往里压数据2.s2栈只负责弹数据3.s2弹栈前,先判断s2是否为空栈,如果是空栈,判断s1是否是空栈,都为空栈则队空4.s1不为空栈则往s2压数据5.s2出栈#include <iostream>#incl...原创 2020-01-05 18:45:50 · 149 阅读 · 0 评论 -
C++ 类和类模版实现循环队列
类模版实现循环队列#include <iostream>using namespace std;#define MAX 50template<typename T> class Queue{ public: T data[MAX]; int front; //队头指针 int count;//用来计算元素数量的计数器,用count和front代替尾指针...原创 2020-01-03 19:23:35 · 716 阅读 · 1 评论 -
C++ 无尾指针循环队列
普通队列中,用来牺牲一单元内存空间来判断队满当没有尾指针时,用一个计数器count,来表示数组元素的数量则对空判断条件是:count==0队满判断条件是:count==MAX#include <iostream>using namespace std;#define MAX 5//没有队尾指针循环队列//增加一个计数器表示数列中元素的数量 struct ...原创 2020-01-03 19:21:27 · 742 阅读 · 0 评论 -
C++ 循环队列
在非空队列里,队首指针始终指向队头元素,而队尾指针始终指向队尾元素的下一位置。顺序队列中存在“假溢出”现象。因为在入队和出队操作中,头、尾指针只增加不减小,致使被删除元素的空间永远无法重新利用。因此,尽管队列中实际元素个数可能远远小于数组大小,但可能由于尾指针巳超出向量空间的上界而不能做入队操作。该现象称为假溢出。如下图所示是数组大小为5的顺序队列中队首、队尾指针和队列中元素的变化情况为了解...原创 2020-01-03 18:35:26 · 2513 阅读 · 0 评论 -
C++ 普通队列
#include <iostream>using namespace std;#define MAX 50//普通队列struct Queue{ int data[MAX]; int front;//队首指针 int rear;//队尾指针 }; //初始化队列void init(Queue &q){ q.front = q.rear = 0;} ...原创 2020-01-03 18:29:59 · 231 阅读 · 0 评论 -
C++ 栈实现汉诺塔问题
#include <iostream>using namespace std;#define MAXSIZE 50//栈struct sqStack{ int data[MAXSIZE]; int top;}; sqStack t[4];//定义三个塔,不使用t0塔void initStack(sqStack &s){ s.top=-1;}vo...原创 2020-01-03 13:39:18 · 1510 阅读 · 2 评论 -
汉诺塔
汉诺塔递归实现可分为三步:1.把n-1(除了最底下大盘子的上面所有盘子)个盘子借助C由A移到B2.把第n个盘子由A移到C3.把第n-1个盘子借助A由B移到C#include <iostream>using namespace std;//汉诺塔int nums = 0;void move(char A, char C){ nums++; cout<<...原创 2020-01-03 13:38:23 · 355 阅读 · 0 评论 -
C++ 栈实现括号匹配
#include <iostream>#include <iomanip>#include <string.h>#include <cmath>#include <algorithm>//算法头文件#include <fstream>#include <cstdlib>#include <vec...原创 2020-01-02 14:51:51 · 798 阅读 · 1 评论 -
C++ 类模版实现栈
#include <iostream>using namespace std;#define MAX 50//类模版实现栈 template<typename T> class Stack{ protected: T data[MAX]; int top; public: //初始化 void init(); //大小 int getSi...原创 2020-01-02 13:34:26 · 440 阅读 · 1 评论 -
C++ 结构体模版实现栈
#include <iostream>using namespace std;#define MAX 50template<typename T> struct Stack{ T data[MAX]; int top;}; //初始化template<typename T> void init(Stack<T> &s){...原创 2020-01-02 13:33:18 · 925 阅读 · 0 评论 -
链表头结点与头指针
链表中第一个结点的存储位置叫做头指针,那么整个链表的存取就必须从头指针开始进行了。之后的每一个结点,其实就是上一个的后继指针指向的位置。链表中第一个结点的存储位置叫做头指针。头指针和头结点不同,头结点即第一个结点,头指针是指向第一个结点的指针。链表中可以没有头结点,但不能没有头指针。链表中设置头结点的好处:防止单链表是空的而设的。当链表为空的时候,带头结点的头指针就指向头结点,如果当链...原创 2020-01-02 09:28:12 · 3836 阅读 · 0 评论 -
C++ 类模版实现单链表的增删改查和链表拷贝
#include <iostream>#include <iomanip>#include <string.h>#include <cmath>#include <algorithm>//算法头文件#include <fstream>#include <cstdlib>#include <vec...原创 2020-01-01 19:35:25 · 572 阅读 · 0 评论 -
C++ 类实现单链表的增删改查和链表拷贝
#include <iostream>#include <iomanip>#include <string.h>#include <cmath>#include <algorithm>//算法头文件#include <fstream>#include <cstdlib>#include <vec...原创 2020-01-01 19:33:51 · 517 阅读 · 0 评论 -
单链表有序插入,插入后依然有序
#include <iostream>#include <iomanip>#include <string.h>#include <cmath>#include <algorithm>//算法头文件#include <fstream>#include <cstdlib>#include <vec...原创 2019-12-30 20:07:08 · 4925 阅读 · 0 评论 -
删除单链表中某元素的前驱元素
#include <iostream>#include <iomanip>#include <string.h>#include <cmath>#include <algorithm>//算法头文件#include <fstream>#include <cstdlib>#include <vec...原创 2019-12-30 15:18:32 · 2117 阅读 · 0 评论 -
单链表的拷贝
#include <iostream>#include <iomanip>#include <string.h>#include <cmath>#include <algorithm>//算法头文件#include <fstream>#include <cstdlib>#include <vec...原创 2019-12-30 15:17:15 · 3020 阅读 · 0 评论 -
单链表的有序插入
#include <iostream>#include <iomanip>#include <string.h>#include <cmath>#include <algorithm>//算法头文件#include <fstream>#include <cstdlib>#include <vec...原创 2019-12-30 14:59:55 · 805 阅读 · 0 评论 -
链表的五种形式
1.单链表在每个结点中除了包含数据域外,还包含一个指针域,用以指向其后继结点。图2-2所示为带头结点的单链表。这里要区分一下带头结点的单链表和不带头结点的单链表①带头结点的单链表中头指针head指向头结点,头结点的值域不含任何信息,从头结点的后继结点开始存储信息。对于带头结点的单链表,它的头指针head始终不等于NULL,head->next等于NULL的时候链表为空。②不带头结点的...原创 2019-12-30 09:52:58 · 7302 阅读 · 0 评论 -
C++ 单链表头插法以及区间删除
#include <iostream>#include <iomanip>#include <string.h>#include <cmath>#include <algorithm>//算法头文件#include <fstream>#include <cstdlib>#include <vec...原创 2019-12-29 19:13:22 · 568 阅读 · 0 评论 -
C++ 类模版实现顺序表增删改查
#include <iostream>#include <iomanip>#include <string.h>#include <cmath>#include <algorithm>//算法头文件#include <fstream>#include <cstdlib>#include <vec...原创 2019-12-29 19:12:08 · 538 阅读 · 0 评论 -
C++vector 迭代器查找元素返回下标
#include <iostream>#include <iomanip>#include <string.h>#include <cmath>#include <algorithm>//算法头文件#include <fstream>#include <cstdlib>#include <vec...原创 2019-12-27 20:17:21 · 20548 阅读 · 1 评论 -
C++ 对象实现增删改查
#include <iostream>using namespace std;#define MAXSIZE 50//对象实现数组的CRUDclass Sqlist{ public: int len; //数组长度 char a[MAXSIZE]; //char数组 Sqlist(){} Sqlist(char a[], int len){ thi...原创 2019-12-27 19:29:51 · 3539 阅读 · 0 评论