![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
qq_32913921
这个作者很懒,什么都没留下…
展开
-
链表
链表学习一些学习中的探索输入n,表示要输入n个数,输入n个数,建链表,用链表的方法输出n个数顺序输出#include<stdio.h>#include<stdlib.h>void prn(struct node *head);struct node{ int data; struct node *next; }; struct node *p,原创 2016-02-19 22:22:53 · 175 阅读 · 0 评论 -
字典树hihocoder1014
小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符串开头的所有单词呢?”身经百战的小Ho答道:“怎么会不能呢!你每给我一个字符串,我就依次遍历词典里的所有单词,检查你给我的字符串是不是这原创 2016-02-19 22:53:37 · 356 阅读 · 0 评论 -
图论之图的存储方式
#include <cstdio>//图的储存结构#define MAXVEX 100 //最大顶点数,应由用户定义#define INFINITY 65535 //用65535来代表∞//邻接矩阵表示法 有向图,无向图的表示法 , 无向图是对称的typedef char VertexType;原创 2016-02-19 22:54:47 · 352 阅读 · 0 评论 -
图论之深度优先遍历
//邻接矩阵版#include <stdio.h>#define MAXVEX 100 //最大顶点数,应由用户定义#define INFINITY 65535 //用65535来代表∞bool visited[MAXVEX]; //访问标志数组typedef char Verte原创 2016-02-19 22:56:04 · 348 阅读 · 0 评论 -
图论之广度优先遍历
//邻接矩阵版#include <stdio.h>#include <queue>using namespace std;#define MAXVEX 100 //最大顶点数,应由用户定义#define INFINITY 65535 //用65535来代表∞bool visited[MAXVEX];原创 2016-02-19 22:57:24 · 261 阅读 · 0 评论 -
最小生成树之普里姆算法
//lowcost数组里的值是adjvex数组里的点指向相应下标的点的权值//lowcost数组保存相关顶点到邻接点(边)的权值,此权值是生成树里的点到该邻接点的最小权值/*例如: 0 1 2 3 4 5 6 A B C D E F Gadjvex: 0 0 0 0 3 3 0lowcost:0 7原创 2016-02-19 22:58:33 · 370 阅读 · 0 评论 -
普通并查集基本操作
#include <cstdio>#include <iostream>#include <cstdlib>#include <cstring>#define MAXN 1000using namespace std;int father[MAXN];//存储节点的父亲节点,如果父亲节点就是自己则说明是根节点int rank[MAXN];/*rank数组用来存储大树的秩并且作为大树的标记*转载 2016-02-19 22:59:45 · 189 阅读 · 0 评论 -
普通并查集之宗教问题(题目)
题目:宗教问题第一行输入n(人数),m(关系数)接着换行输入m个关系换行输入询问次数q换行输入询问每组询问对应一组输出:如果是则输出YES,否或不一定都输出NO例:5 3 ,5个人,3个关系1 2 1说他在自己的教堂里看到过22 3 2说他在自己的教堂里看到过34 5 4说他在自己的教堂里看到过52 2组询问次数1 3 问:1和原创 2016-02-19 23:01:29 · 178 阅读 · 0 评论 -
带权并查集 poj1182
/*带权并查集: 1 所谓的带权,我的理解是根节点和儿子节点之间的关系不再是那种单纯的所属关系,而是增加了一个权值来表示他们之间的特殊关系。比如距离就可以作为权值,在带权并查集里,需要注意的是。首先,rank数组不再表示哪一个是大树,而是表示某个节点到根节点的权值。第二在路径压缩的过程中需要利用递归的思想把路径上的点的rank值进行更新。最后就是合并的时候,不再是转载 2016-02-19 23:03:08 · 164 阅读 · 0 评论 -
字典树(hdu1671)
题意:给定n个电话号码串,问这n个电话号码串中是否存在某一串是其它串的前缀,如果存在输出NO,否则YES 思路:把这n个电话号码串建立成字典树,在插入的时候我们直接判断当前插入的字符串是不是其它串的前缀或者其它串是不是这个串的前缀即可//解法一:用动态分配#include <iostream>#include <cstdio>#include <cstdlib>#include <c原创 2016-02-19 22:52:40 · 224 阅读 · 0 评论 -
字典树(hdu1075)
hdu1075 题意:给定一个映射表的关系,给定每个单词的对应的映射的单词。现在给定一段字符串,要求如果单词能够翻译就进行翻译,否则原样输出,但是注意所有的\n,\r,空格以及所有的标点符号都是不翻译的。 思路:先对映射表的单词建立字典树,每个单词的尾节点标记这个单词所映射的单词的下标,那么对于给定的字符串,我们只要把所有的单词进行解析去字典树中查找即可。//解法一:建一个映射表和字典树原创 2016-02-19 22:50:04 · 319 阅读 · 0 评论 -
最优二叉树之哈夫曼编码
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define N 100 // 默认编码字符的个数的范围为1~100,如果后面输入的n大于100则要在这里做修改#define M (2*N-1) // 树中总的结点数目 N也是树中的原创 2016-02-19 22:48:57 · 456 阅读 · 0 评论 -
循环链表
约瑟夫环:从1开始:#include<stdio.h>#include<stdlib.h>struct node{ int v; struct node *next;}*head;void insert_node(int val) //头插法{ struct node *p=(struct node*)malloc(原创 2016-02-19 22:29:17 · 153 阅读 · 0 评论 -
栈
hdu1022//(题目)注意:三辆火车的编号一定不同#include<stdio.h>int ans[100],ansize;char sta[100],ssize,a[100],b[100];void push(char v){ sta[ssize++]=v;}char pop(){ return sta[--ssize]; //size已经减1了}int原创 2016-02-19 22:35:27 · 163 阅读 · 0 评论 -
队列
//结构数组实现#include<stdio.h>#define MAX_SIZE 1000int que_length = 0;int que_rear = 0;int que_front = 0;struct fifo{ int data;}que[MAX_SIZE];int length(){ return que_length;}void push(int原创 2016-02-19 22:39:17 · 134 阅读 · 0 评论 -
队列 hdu1276
//先说明cmp里是个用于踢人的函数,然后先去写主函数,//i=1(二) i=2(三) i=3(二) i=4(三) 所以,i是偶数则数到3踢人,否则数到2踢人#include <cstdio>#include <iostream>#include <queue>using namespace std;queue <int> s;void cmp(int k){ int i =原创 2016-02-19 22:40:54 · 623 阅读 · 0 评论 -
优先队列(堆实现)
#include <iostream>#include <cstdio>using namespace std;int sizeOfheap, mark;void heapAdjust(int a[], int i, int sizeOfheap)//调整堆 (调整范围:i与i下面的子树){ int lchild = 2 * i; //i的左孩子节点序号 int原创 2016-02-19 22:42:06 · 196 阅读 · 0 评论 -
二叉树 基本操作(最初版)
#include <cstdio>#include <cstdlib>#include <stack>#include <queue>using namespace std;//二叉树结点typedef struct buildnode{ //数据 char data; //左右孩子指针 struct buildnode *lchild, *rchild;原创 2016-02-19 22:45:14 · 135 阅读 · 0 评论 -
二叉树基本操作(完整版)
#include <cstdio>#include <cstdlib>#include <queue>#include <stack>//1二叉树中节点的的结构struct treenode{ struct treenode *lchild; struct treenode *rchild; struct treenode *father; int level原创 2016-02-19 22:46:04 · 272 阅读 · 0 评论 -
二叉搜索树基本操作
#include <cstdio>#include <cstdlib>#include <queue>#include <stack>//查找值这类不修改原数据的行为,则用pnode,要插入,删除,建树,则用pnode* 指向指针的指针typedef struct searchtree{ int key; struct searchtree *lchild; //左孩子指原创 2016-02-19 22:47:24 · 275 阅读 · 0 评论 -
插入排序
#include<stdio.h>int main(){ int a[5]={5,4,1,3,2},i,j,t; int n=5; for(i=1;i<n;i++) //i从数组中的第2个数开始 { t=a[i]; //把要插的元素先记住 for(j=i-1;j>=0&&a[j]>t;j--) //先看j是否是大于等原创 2016-02-19 23:04:48 · 121 阅读 · 0 评论