数据结构
文章平均质量分 75
一叶知秋-
这个作者很懒,什么都没留下…
展开
-
有向图和无向图邻接矩阵的输入输出,深度深度优先搜索,广度优先搜索
#include<iostream>#include<stdlib.h>#include<malloc.h>#include<queue>#define MAXLEN 100using namespace std;typedef char DataType;bool visited[MAXLEN]; typedef struct{ ...原创 2018-02-09 19:22:47 · 1545 阅读 · 0 评论 -
图的邻接表存储、创建、深度优先遍历、广度优先遍历
#include<iostream>#include<stdlib.h>#include<malloc.h>#include<queue>#define MAXLEN 100using namespace std;typedef char DataType;bool visited[MAXLEN];typedef struct Edg...原创 2018-02-20 22:03:42 · 1813 阅读 · 0 评论 -
在图中找a点到b点的最短路径
该问题的核心算法只有五步,假设在图中有四个顶点。我们要让任意两点(假设是a到b)之间的路程变短,只能引入第三个点(顶点k),并通过这个顶点k中转即a->k->b。假如现在只允许经过一号顶点,求任意两点之间的最短路程,应该如何求呢?只需判断graph[i][1]+graph[1][j]是否比graph[i][j]小即可。同理,允许经过二号点,三号点......,所以核心算法代码如下:...原创 2018-03-10 20:40:21 · 6988 阅读 · 0 评论 -
贪心算法
1.活动选择问题 这是《算法导论》上的例子,也是一个非常经典的问题。有n个需要在同一天使用同一个教室的活动a1,a2,…,an,教室同一时刻只能由一个活动使用。每个活动ai都有一个开始时间si和结束时间fi 。一旦被选择后,活动ai就占据半开时间区间[si,fi)。如果[si,fi]和[sj,fj]互不重叠,ai和aj两个活动就可以被安排在这一天。该问题就是要安排这些活动使得尽量多的活动能不冲突的...原创 2018-02-24 15:42:39 · 286 阅读 · 0 评论 -
并查集算法
代码如下:#include<iostream>using namespace std;int f[1000];void init(int n) //初始化 { for(int i=1;i<=n;i++) f[i]=i;}int getf(int v) //返回的是v的所属结点 { if(f[v]==v) return v; else { f[...原创 2018-03-12 19:19:53 · 2138 阅读 · 1 评论 -
用并查集来解最小生成树问题
#include<iostream>using namespace std;int f[1000];typedef struct node{ int u; int v; int w;}graph;void sort(graph g[],int m){ for(int i=1;i<m;i++) for(int j=1;j<=m-i;j++) if(g[...原创 2018-03-12 21:36:37 · 203 阅读 · 0 评论 -
prim算法来解最小生成树问题
#include<iostream>using namespace std;int main(){ int graph[100][100],dis[100],book[100]={0};//dis数组是记录生成树到非树顶点的距离,book记录生成树的顶点 int inf=999999; int count=0,sum=0;//count用来记录生成树中顶点的个数,sum用来...原创 2018-03-12 21:53:38 · 584 阅读 · 0 评论 -
八皇后问题
给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个皇后,使任意的两个皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。#include<iostream> using namespace std; int total=0; int c[100];bool is_ok(int row) /...原创 2018-03-05 21:22:24 · 185 阅读 · 0 评论 -
蓝桥杯 2n皇后问题
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。输入格式 输入的第一行为一个整数n,表示棋盘的大小。 接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置可以放皇后,如果一个整数为0...原创 2018-03-06 16:34:50 · 1006 阅读 · 0 评论 -
二叉链树的创建结点,递归构造二叉树、非递归构造二叉树、递归进行前、中、后遍历,非递归进行前中后遍历、层次遍历
二叉链树的创建结点,递归构造二叉树、非递归构造二叉树、递归进行前、中、后遍历,非递归进行前中后遍历、层次遍历、求二叉树叶子结点的个数、求二叉树的总结点个数、求二叉树的深度、在二叉树上查询某个元素x是否和某个结点的值相等。本代码用递归进行二叉链树的构造、遍历和非递归进行二叉链树的构造、遍历二叉链表图示:代码如下://二叉树的二叉链表示 #includeusing namespace std;#原创 2018-01-17 21:15:57 · 659 阅读 · 0 评论 -
树的三叉链的创建和遍历
树的三叉链的创建和遍历,和二叉树的不同就是结点定义多了parent,和创建函数中的部分代码不一样图示如下代码如下:#include#include#include#define DataType char#define MAXSIZE 100 using namespace std;typedef struct Node{ DataType data; struct Node *l原创 2018-01-18 13:56:16 · 3762 阅读 · 0 评论 -
队列的链式存储的两种定义方式
队列的链式存储的定义结点、初始化、判断空、入队、出队、读取队头元素、求队列长度操作方法一:这种链队列有头指针,上图分别为链队列为空、非空、只有一个元素的时候的情况,代码如下://队列的链式存储和操作的实现 #include#include#includetypedef int DataType;typedef struct Node{ //定义链队结点的类原创 2018-01-16 13:57:26 · 3074 阅读 · 0 评论 -
顺序表的创建、插入、删除、查找、求表长、输出元素
//线性表的顺序存储(顺序表)#include#include#include#define MAXLEN 10 // 定义顺序表的最大长度MAXLEN为10 typedef struct{ //定义节点 int data[MAXLEN]; int last; //last用来记录当前线性表中最后一个元素的数组中的位置,即last起到了指针的作用 }原创 2018-01-11 16:15:02 · 17272 阅读 · 1 评论 -
单链表的创建、初始化、插入、删除 、输出、求表长、清空、查找操作
//单链表的创建、初始化、插入、删除 、输出、求表长、清空、查找操作 #include#include#include#define N 5#define ERROR 0#define OK 1typedef struct node{ //定义节点 int data; struct node *next;}linklist;linklist *Initlist()原创 2018-01-11 20:29:20 · 6197 阅读 · 2 评论 -
循环链表 实现对循环链表的初始化,创建,插入,删除,输出操作
//循环链表 实现对循环链表的初始化,创建,插入,删除,输出操作 //它只设置尾指针rear,这时头节点为rear->next#include#include#includetypedef struct node{ //定义单链表的节点 int data; struct node *next; }linklist; linklist *head,*rear;原创 2018-01-12 16:31:52 · 5300 阅读 · 1 评论 -
双向链表的建立、初始化和输出
这里只写出双向链表的建立、初始化和输出,其他的插入、删除、求表长等操作和单链表类似,可以参照我之前的文章#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef int ElemType;typedef struct Node{ //创建双向链表的结点 int dat...原创 2018-01-14 20:25:31 · 4870 阅读 · 3 评论 -
初始化建立链表的两种方法
方法一是把头指针作为函数参数方法二是在函数中建立好链表后,然后返回这个链表#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef int ElemType;typedef struct Node{ //创建双向链表的结点 int data; struct N...原创 2018-01-14 20:42:00 · 36032 阅读 · 6 评论 -
栈的顺序存储的初始化、判断栈空、入栈、出栈、读取栈顶元素、栈置空、求栈长操作
栈的顺序存储的初始化、判断栈空、入栈、出栈、读取栈顶元素、栈置空、求栈长操作代码如下://栈的顺序存储表示 #include#include#include#define MAXSIZE 100 typedef int ElemType; typedef struct Node{ //定义栈 ElemType data[MAXSIZE]; int top;}Seq原创 2018-01-15 13:54:20 · 7798 阅读 · 0 评论 -
编程小结
1. 当要用到很大的数的时候用 long long n;来定义,其输出形式为:printf("%I64d",n);注意这里是大写的 i ,也可以用%IId输出。2.在函数参数中的*、&、*&,在链表中,void InitLink(LinkList *&head)初始化链表的时候,这里的*&是把指针的地址传进来了,在main函数中定义头节点:LinkList *h...原创 2017-11-09 09:11:50 · 446 阅读 · 0 评论 -
栈的链式存储的定义、初始化、判断空、入栈、出栈、读取栈顶元素、求栈长度、清空栈操作
栈的链式存储的定义、初始化、判断空、入栈、出栈、读取栈顶元素、求栈长度、清空栈操作,代码如下://栈的链式存储表示 因为入栈和出栈top都要改变,所以传参数的时候要传指针的地址 #include#include#includetypedef int ElemType;typedef struct Node{ //定义链栈的结点 ElemType data; st原创 2018-01-15 16:20:14 · 7385 阅读 · 0 评论 -
顺序队列的创建、初始化、判断空、入队、出队、读取队头元素、置空、求队长操作
顺序队列的创建、初始化、判断空、入队、出队、读取队头元素、置空、求队长操作代码如下://队列的顺序存储#include#include#include #define MAXSIZE 100 //顺序队列的最大容量typedef int DataType;//#define DataType inttypedef struct{ DataType data[MAXSIZ原创 2018-01-15 20:23:17 · 7556 阅读 · 1 评论 -
铁轨问题
某城市有一个火车站,铁轨铺设如下图所示。有n节车厢从A方向驶入车站,按进站顺序编号为1~n。你的任务是让它们按照某种特定的顺序进入B方向的铁轨并使出车站。为了重组车厢,你可以借助中转站C;这是一个可以停放任意多节车厢的车站,但由于末端封顶,驶入C的车厢必须按照相反的顺序驶出C。对于每个车厢,一旦从A进入C,就不能再回到A了;一旦从C进入B,就不能回到C了。换言之,在任意时刻,只有两种选择:A-&g...原创 2019-07-07 19:45:26 · 3077 阅读 · 0 评论