数据结构与算法
数据结构咩
修花锦年喵
https://github.com/xiunianjun/
展开
-
二叉树的遍历问题
二叉树的遍历实质上就是把它给压扁成一个线性的结构。我们在遍历时,常常会遇到问题比如说遍历了一个,丢掉了另一个怎么办。我们可以用栈来储存没遍历的被丢掉的东西,也可以用队列。用栈储存,可以分为使用DFS递归(系统栈)、和非递归遍历。非递归三序遍历DFS递归三序遍历用队列储存,层序遍历。队列层序遍历...原创 2022-01-02 15:40:58 · 271 阅读 · 0 评论 -
第十一届蓝桥杯 字串排序 我的错误的猜想【自我总结用】
思路+码一共约45分种,最终得分七十分,我知道自己错在哪,好像不怎么能改得了,但混混分应该还行,先占个坑写写思路吧。首先我的思路基础,一是冒泡排序进行一次交换代表消去一个逆序对。输入的v代表要消去的逆序对的个数。二是由于贪心思想,我们优先选取字典序低的字母。三是我看用例猜测,bbaa、ccbbaa,这种连续两个的应该是要尽量多【当然看了下别人好像三个也行,猜测光荣阵亡。但这点可以看看能不能完善】在以上的思路基础下,于是认为,结果字符串应该是类似于那样的结构,再加上fghj这种之后的字原创 2022-02-07 00:06:30 · 7219 阅读 · 2 评论 -
蓝桥杯 双向排序 【超时70分】
又是写了一小时的题。。。。思路蛮快的,链表删除反倒是出错看了半天我去原创 2022-02-02 20:48:00 · 1697 阅读 · 8 评论 -
力扣做题心得堆放
1.栈的数组写法int * stack = (int *)malloc(sizeof(int) * propertiesSize); int stackSize = 0;stack[stackSize++] = properties[i][1];通过减小stackSize模拟pop过程,增大来模拟push过程2.使用uthash增加操作查找操作...原创 2022-01-28 14:37:25 · 5910 阅读 · 0 评论 -
链表冒泡排序
void BubbleSort(List head){ //找到最后的那个指针 List last=head; while(last->next){ last=last->next; //TODO } List p=last; //标志排序是否结束 int flag=1; while(flag){ flag=0; //每轮从零开始 List q=head; while(q!=p){ //冒泡交换 if(q->next-&.原创 2022-01-24 20:20:57 · 369 阅读 · 0 评论 -
求关键路径【拓扑排序】
我的版本是使用邻接矩阵来存储是否邻接以及边的值,并且反应度数。这个用途太多了,以至于邻接矩阵在计算earlist时为了反应度数而清零,计算latest时所需的边的权值就很难搞,只能一开始时建立两个相同邻接矩阵,更加浪费空间。我看到别人的版本是采用邻接表+邻接表计算出的度数列方式,非常省空间。以后有时间再写写。下面放上我的代码。这个是用到的数据结构定义,分别是点的数据类型栈的数据类型以及队列的数据类型。int IsHead(int graph[][SIZE],int index){原创 2022-01-24 11:47:01 · 464 阅读 · 0 评论 -
Dijstra算法最小堆优化
#include<stdlib.h>#include <stdio.h>#define MAX_SIZE 20#define INF 10000typedef struct Point{ int point; int pre; int distance; }Point;typedef struct HeapStruct{ Point* array; int size; int capacity;}HeapStruct;typedef HeapStruct.原创 2022-01-22 22:38:38 · 539 阅读 · 0 评论 -
二叉树中序遍历计算/输出表达式
testcase:++1 *2 3 *+*4 5 6 7 result:189/*define: typedef struct TreeNode{ TreeNode* left; TreeNode* right; char value; }TreeNode;*/int Count(TreeNode* root)//中序遍历计算 { int result=0; if(root) { switch (root-&...原创 2022-01-02 19:50:31 · 729 阅读 · 0 评论 -
二叉树递归遍历求树深
/*define typedef struct TreeNode{ TreeNode* left; TreeNode* right; int value; }TreeNode;*/int CountDepth(TreeNode* root){ int HR,HL,MaxH; if(!root){ return 0; //TODO } else if(root) { HL=CountDepth(root->left); .原创 2022-01-02 19:32:37 · 545 阅读 · 0 评论 -
二叉树的层序遍历【使用队列】
过程描述:弹出一个结点,其左右节点入队,循环直到队列为空。/*define: typedef struct TreeNode{ TreeNode*left; TreeNode*right; int value; }TreeNode; typedef struct QNode{ TreeNode *treenode; QNode*next; }QNode; typedef struct Queue{ .原创 2022-01-02 15:40:24 · 548 阅读 · 0 评论 -
DFS求图的连通分支、割点数、判断是否连通
先放个连通分支数/* DFS求图的连通分支数 */#include <stdio.h>#define N 1//看是否所有顶点都被访问标记过 int IsVisit(int visit[]){ for(int i=0;i<N;i++){ if(visit[i]==0){ return 0; //TODO } //TODO } return 1;}//DFS搜索 void DFS(int graph[N][N],int number,in原创 2021-12-28 12:25:19 · 895 阅读 · 0 评论 -
Huffman算法得到最优树【使用链表+树】
我是采用了链表,只不过链表里的value用树的节点替代。具体代码如下:#include <stdio.h>#include<stdlib.h>//建立树结点 typedef struct TreeNode{ TreeNode* left; TreeNode* right; int value;}TreeNode;//建立链表结点 typedef struct Link{ TreeNode* data; Link *next;}Link;typede原创 2021-12-27 23:31:28 · 477 阅读 · 0 评论 -
我的二叉树先序创建与先中后序遍历
#include <stdio.h>#include <stdlib.h>typedef struct TreeNode{ TreeNode* left; TreeNode* right; int value;}TreeNode;void CreateTree(TreeNode** root){ char c; c=getchar(); if(c==' '){ *root=NULL; //TODO } else{ *root=(TreeNode*.原创 2021-12-27 23:17:44 · 290 阅读 · 0 评论 -
Dijkstra算法【我的垃圾版本】
我超,我居然写了好久呜呜呜,明明最后看到成品觉得其实很清晰啊……怪我写的时候没想好#include <stdio.h>int isFlag(int flag[],int n){ for(int i=0;i<n;i++){ if(flag[i]==0){ return 1; //TODO } //TODO } return 0;}int main(){ int n,m; scanf("%d %d",&n,&m); //初始化原创 2021-12-26 22:15:55 · 245 阅读 · 0 评论 -
C语言实现Warshall算法求关系传递闭包
/* Warshall算法求关系传递闭包 */#include <stdio.h>int main(){ int M[4][4]; for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ scanf("%d",&M[i][j]); } //TODO } for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ //i->j->k 如果j与k间.原创 2021-12-30 19:33:31 · 700 阅读 · 1 评论 -
链表计算多项式的和
#include<stdlib.h>#include <stdio.h>typedef struct Link{ int e; int a; Link *next;}Link;typedef Link* List;List CreateList(){ List list=(List)malloc(sizeof(Link)); list->next=NULL; list->e=list->a=0; return list;}void.原创 2021-12-31 17:19:10 · 220 阅读 · 0 评论 -
十字链表创造矩阵【二维数组】
#include <stdio.h>#include <stdlib.h>//term结点的值 typedef struct value{ int row; int col; int number;}value;//每个结点 typedef struct ELNode{ int tag;//tag=0 head tag=1 term union Difference { value termValue;//对于term结点 ELNod...原创 2021-12-29 17:39:32 · 327 阅读 · 0 评论 -
二叉树非递归遍历【使用堆栈】[有误]
testcase:124 5 67 38 9 【末尾三个空格。空格代表空树】中序遍历的片段://中序遍历 void TraversalTree(TreeNode* tree){ Stack stack; stack.top=NULL; TreeNode*p=tree; int flag=0; while(p){ //flag标记左子树有没有遍历过,1:遍历过 while(p->left&&(!flag)){ //当p为有左...原创 2022-01-01 16:14:27 · 579 阅读 · 0 评论 -
避圈法求最小生成树
#include <stdio.h>#include<stdlib.h>typedef struct MapNode{ int value; int beginPoint; int finalPoint;}MapNode;void ShellSort(MapNode*map,int m){ int inc,i,j; int Sedgewick[] = {260609,146305,64769,36289,16001,8929, 3905,2161,92.原创 2021-12-28 10:48:35 · 788 阅读 · 0 评论 -
数据结构------栈,队列
栈#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct Node{ char value; Node*bottom;}Node;typedef struct Stack{ int lenth; Node* top;}Stack;Node* CreateStackNode(){ Node * p=(Node*)malloc(sizeof(Node));原创 2021-12-31 12:05:10 · 363 阅读 · 0 评论