数据结构
山顶处见
好的关系往往是势均力敌
展开
-
创建一个有向图,并输出各个节点的出度和入度(邻接矩阵存储)
#include <bits/stdc++.h>using namespace std;#define MAX 100typedef struct Arcell{ int adj;//权重}Arcell,AdjMatrix[MAX][MAX];//邻接矩阵typedef struct MGraph{//图的结构 char vex[MAX];//点数组 AdjMatrix arc;//边 int Vexnum,Arcnum;//点数目,边数目}MGraph;int原创 2020-12-25 14:17:44 · 3970 阅读 · 0 评论 -
给你一个无向图,输出它各个节点的度(邻接矩阵存储)
#include <bits/stdc++.h>using namespace std;#define MAX 100typedef struct Arcell{ int adj;//权重}Arcell,AdjMatrix[MAX][MAX];typedef struct MGraph{ char vex[MAX];//点的数组 AdjMatrix arc;//边 int Vexnum,Arcnum;//顶点数,边数}MGraph;//构建图int Loca原创 2020-12-25 13:02:09 · 2929 阅读 · 0 评论 -
双向链表基本操作
#include<bits/stdc++.h>using namespace std;typedef struct DulNode{ int data; struct DulNode *prior,*next;}DulNode,*DuLinkList;bool InitDuList_L(DuLinkList &L){ L=new DulNode; if(!L){ return false; } L->pri原创 2020-12-24 22:16:42 · 147 阅读 · 0 评论 -
创建一个单链表,并实现查找,取值,删除,插入等基本操作
#include <iostream>using namespace std;typedef struct LNode{ int data;//数据域 struct LNode * next;//指针域} LNode,*LinkList;//*LinkList为指向结构体LNode的指针类型bool InitList_L(LinkList &L){// L=new LNode; if(!L){ return false;原创 2020-12-24 22:01:33 · 3422 阅读 · 2 评论 -
创建一个顺序表,并实现查找,删除,插入,输出等操作
#include <iostream>using namespace std;#define Maxsize 100typedef struct{ int *elem; int length;//长度} SqList;bool InitList(SqList &L){//构造一个空的顺序表 L.elem=new int[Maxsize]; if(!L.elem){ return false; } L.length=原创 2020-12-24 21:47:08 · 2702 阅读 · 0 评论 -
求最短路径-----迪杰斯特拉算法
3),迪杰斯特拉算法(解决单源最短路径)基本思想:每次找到离源点(如1号结点)最近的一个顶点,然后以该顶点为中心进行扩展,最终得到源点到其余所有点的最短路径。基本步骤:1,设置标记数组book[]:将所有的顶点分为两部分,已知最短路径的顶点集合P和未知最短路径的顶点集合Q,很显然最开始集合P只有源点一个顶点。book[i]为1表示在集合P中;2,设置最短路径数组dst[]并不断更新:初始状态下,令dst[i] = edge[s]i,很显然此时dst[s]=0,book[s]=1。此时,在集合Q中可选择原创 2020-12-13 14:44:25 · 486 阅读 · 0 评论 -
求最短路径——DFS+Floyd算法
1),深度或广度优先搜索算法(解决单源最短路径)从起始结点开始访问所有的深度遍历路径或广度优先路径,则到达终点结点的路径有多条,取其中路径权值最短的一条则为最短路径。2),弗洛伊德算法(解决多源最短路径):时间复杂度O(n3),空间复杂度O(n2)基本思想:最开始只允许经过1号顶点进行中转,接下来只允许经过1号和2号顶点进行中转…允许经过1~n号所有顶点进行中转,来不断动态更新任意两点之间的最短路程。即求从i号顶点到j号顶点只经过前k号点的最短路程。分析如下:1,首先构建邻接矩阵Floyd[n+1]原创 2020-12-13 14:40:55 · 1199 阅读 · 0 评论 -
全排序算法(选择,冒泡,快速,插入)
详解全在代码里:#include<bits/stdc++.h>using namespace std;int a[10005];int n;/*在一个长度为N的无序数组中,第一趟遍历N个数据,找出其中最小的数值与第一个元素交换;第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换……第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。*/void choicesort(int a[],int n)//选择排序{ for原创 2020-12-10 16:15:39 · 210 阅读 · 0 评论 -
二叉树前序中序后序递归遍历
1,二叉树建立2,二叉树遍历3,二叉树输出(详细说明在代码里)ps:怕有些小伙伴看不懂对于输入的数字怎么建立二叉树的,所以我花了个图因为一直是先建立左子树在建立右子树,所以一直左边走,碰到0就代表这个是叶子节点了,就回溯。#include<bits/stdc++.h>using namespace std;typedef int TelemType;//整型变量typedef struct BinaryTreeNode{ TelemType data; st原创 2020-12-08 16:24:26 · 117 阅读 · 0 评论 -
邻接表存储的无向图DFS BFS 和判断是否两点之间有一条路径
1.采用邻接表或邻接矩阵作存储结构。 2.键盘输入节点个数、名称、边。 3.输出对应的邻接表或邻接矩阵。 4.输出二个遍历结果。 5.利用遍历算法判断图中的两个顶点之间是否存在路径。#include<bits/stdc++.h>using namespace std;#define MAX_NUM 20 typedef struct ArcNode { //表节点 int adjvex; //邻接点 struct ArcNo原创 2020-12-08 16:13:44 · 2021 阅读 · 2 评论 -
Huffman编码的实现
Description由键盘输入一组整数,作为权值序列,求赫夫曼编码并输出。Input输入为两行数据,第一行是一个整数,作为输入权值的个数(<=10),第二行为权值序列。Output输出为权值序列对应的赫夫曼编码,每个编码输出一行Sample Input44 3 2 1Sample Output4:03:102:1101:111#include<bits/stdc++.h>using namespace std;#define MIN 0x7fffffff原创 2020-11-23 15:14:53 · 747 阅读 · 0 评论 -
建立队列的顺序存储结构(循环队列),进行入队和出队的操作
建立队列的顺序存储结构(循环队列),进行入队和出队的操作首先我们先说一下队列的基本函数操作(c++)头文件#include<queue>建立一个队列 数据类型 变量名queue<int> q;1、检验队列是否为空empty() 堆栈为空则返回真q.empty();2、返回队首元素front() 返回队首元素int result=q.front();3、返回队尾元素back()返回队尾元素int result=q.back();4、弹出队首元素原创 2020-10-28 20:05:57 · 5987 阅读 · 0 评论 -
反转链表
反转一个单链表思路:双指针。定义两个指针cur 和 pre,pre是反转后的前,cur是反转后的后,每次让pre的next指向cur,然后让pre和cur都往后移一位,最后当pre为空时结束。/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* reverseList(struct原创 2020-10-24 16:33:14 · 62 阅读 · 0 评论 -
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值
返回链表的第K个节点的值面试题02-02思路:如果是数组,可以直接返回length-k+1节点的值,但是链表不知道长度,所以先定义一个新节点p,让p先往前走k步,然后再让p和头结点head同时走到表尾。/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */int kthToLast(struct ListNode*原创 2020-10-24 15:24:23 · 531 阅读 · 0 评论 -
合并顺序表
已知两个顺序表(头指针分别为La 和Lb)中的数据元素均自小至大有序,编写算法将这两个顺序表归并为一个顺序表。PS:自己编写顺序表函数#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>#define LIST_INIT_SIZE 100#define LISTADD 10struct sq{ int *elem; int length;原创 2020-10-20 19:17:24 · 416 阅读 · 0 评论 -
建立栈的顺序存储结构,实现输入数据(入栈操作)和输出数据(出栈操作)
建立栈的顺序存储结构,实现输入数据(入栈操作)和输出数据(出栈操作)。首先STL的栈函数stack都了解,1,(先建立栈)stacks;2,头文件#include或者是#include<bits/stdc++>3,清空栈 s.clear();4,栈的长度 s.size();5,s.push(x) 将数据x压栈。也就是放在栈顶6, s.top()返回栈顶元素的引用7,s.pop()将栈顶元素弹出。注意并不会返回栈顶元素。 所以pop往往和top合用8,s.empty()可以原创 2020-10-19 20:02:44 · 5718 阅读 · 3 评论