C语言
sandyznb
这个作者很懒,什么都没留下…
展开
-
数据结构---AVL树与红黑树对比
RB-Tree和AVL树作为BBST,其实现的算法时间复杂度相同,AVL作为最先提出的BBST,貌似RB-tree实现的功能都可以用AVL树是代替,那么为什么还需要引入RB-Tree呢?红黑树不追求"完全平衡",即不像AVL那样要求节点的 |balFact| <= 1,它只要求部分达到平衡,但是提出了为节点增加颜色,红黑是用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内解决,而AVL是严格平衡树,因此在增加或者删除节点的时候,根据不同情况,旋转的次数比红黑树要多。 就原创 2020-12-16 17:42:22 · 650 阅读 · 0 评论 -
BST树 AVL树 红黑树 23树 234树 B树 B+树
一:二叉查找树(二叉排序树 二叉搜索树)一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;(4)没有键值相等的节点(因此,插入的时候一定是叶子节点)。当插入有序节点(1,2,3,4,5,6,7 或者7 6 5 4 3 2 1等),退化成单支树(只有右子树了或者左子树了)查找效率最好O(logn),最坏O(n)插入效率和查找效.原创 2020-12-15 19:07:10 · 2041 阅读 · 0 评论 -
linux c/c++ 编程 (进程组 会话 守护进程)
一:进程组1:进程组也称之为作业。代表一个或多个进程的集合,每个进程都属于一个进程组。在waitpid函数和kill函数的参数中都曾使用到。操作系统设计的进程组的概念,是为了简化对多个进程的管理。2:当父进程创建子进程的时候,默认子进程与父进程属于同一进程组。3:进程组ID:第一个进程的进程ID (组长ID)4:组长可以创建一个进程组,可以创建进程组中的进程。只要进程组中有一个进程存在,进程组就存在,和组长进程是否终止没有关系。5:kill -SIGKILL -进程组ID(负的)来将整.原创 2020-12-11 18:16:56 · 338 阅读 · 0 评论 -
3.5 信号编程进阶、sigprocmask范例
一:信号集一个进程,必须能够记住 这个进程 当前阻塞了哪些信号000000000000000000000我们需要 “信号集 ”的这么一种数据类型(结构),能够把这60多个信号都表示下(都装下)。0000000000,0000000000,0000000000,00,0000000000,0000000000,0000000000,00 (64个二进制位)linux 是用sigset_t结构类型来表示信号集的;typedef struct{ unsigned long sig[2];}原创 2020-12-10 15:04:02 · 167 阅读 · 0 评论 -
linux c++网络编程 --- 信号捕捉
#include <stdio.h>#include <stdlib.h>#include <signal.h>#include <unistd.h>void sigusr(int signo){ if(signo == SIGUSR1) { printf("received sigusr1\n"); } else if(signo == SIGUSR2.原创 2020-12-10 11:19:37 · 307 阅读 · 0 评论 -
数据结构---平衡二叉树 调整
调整有些术语:不平衡的发现者:在插入一个结点后,从下往上数的第一个平衡因子(左子树的高度-右子树的高度)变为2或者-2的结点。麻烦结点:破坏了平衡的结点,就是刚刚插入的结点。1:LL旋转需要LL旋转的情况:麻烦结点在不平衡发现者的左子树的左子树上,因而叫LL插入,需要LL旋转;方法:把不平衡发现者的左儿子提到不平衡发现者的位置,使他成为新的根,而不平衡发现者则插入到之前他左儿子的右儿子上,新根之前的右儿子插入到不平衡发现者的左儿子上面。具体如图:void LL_Rotate(B原创 2020-12-07 18:41:16 · 1634 阅读 · 2 评论 -
数据结构---图 DepthFirstSearch
#include <stdio.h>#include <stdlib.h>typedef struct MGraph{ char vexs[100]; int arc[100][100]; int numVertexes; int numEdges;}MGraph;void createMGraph(MGraph *g){ printf("input 顶点和边数:"); scanf("%d,%d",&g->.原创 2020-12-05 20:35:32 · 129 阅读 · 0 评论 -
字符串查找---KMP算法
#include <stdlib.h>#include <stdio.h>int getNextArray(char *partner, int *next){ int i = 0; int j = -1; next[i] = j; int plen = strlen(partner); while (i < plen) { if (j == -1 || partner[i] == partner[j]) { i++; j++; .原创 2020-11-16 21:02:05 · 101 阅读 · 0 评论 -
二叉排序树(二叉查找树、二叉搜索树)
#include <stdlib.h>#include <stdio.h>typedef struct Node{ int value; struct Node *leftChild; struct Node *rightChild;}Node;Node* createNode(int value){ Node *node = (Node*)malloc(sizeof(Node)); node->value = value; node->le.原创 2020-11-19 11:42:14 · 163 阅读 · 0 评论 -
数据结构---线性表(链式存储)
/* 链表 链式存储*/#include <stdlib.h>#include <stdio.h>#include <assert.h>#define ElemType int#define ERROR -1#define OK 0typedef struct Node{ ElemType value; struct Node *next;}Node, *LinkList;Node* createNode(int value){.原创 2020-11-25 14:25:02 · 77 阅读 · 0 评论 -
数据结构---线性表(顺序存储)
/*链表 顺序存储*/#include <stdio.h>#include <stdlib.h>#include <assert.h>#define ElemType int#define MAX_SIZE 100typedef struct Node{ ElemType data[MAX_SIZE]; int length;}SeqList;void initSeqList(SeqList *list){ ass...原创 2020-11-24 16:54:09 · 114 阅读 · 0 评论 -
创建二叉树 易出错的地方
#include <stdlib.h>#include <stdio.h>typedef struct Node{ int value; struct Node *leftChild; struct Node *rightChild;}Node;Node* createNode(int value){ Node *node = (Node*)malloc(sizeof(Node)); node->value = value; node->le.原创 2020-11-23 11:18:28 · 1095 阅读 · 0 评论 -
树----基本概念
二叉树和度为2的树度为2的树至少有一个结点有两棵子树,而二叉树可以是一棵空树,度可以为0,1度为2的树无左右子树之分(无序树),而二叉树是有序树,左右子树的次序不能随意颠倒二叉查找树 (Binary Search Tree -- BST)二叉搜索树二叉排序树上边三种树 都是指的同一种树 不同的叫法。都是在二叉树的基础上面将小于结点的分支都放在该结点的左边,而大于该结点的分支都放在右边的树,这样很便于查找。特点:根节点的值大于其左子树中任意一个节点的值,小于其右节点中...原创 2020-11-17 19:43:30 · 814 阅读 · 0 评论 -
树----完全二叉树
在完全二叉树中,具有n个节点的完全二叉树的深度为[log2n]+1,其中[log2n]+1是向下取整。完全二叉树是具有n个节点的二叉树,若按层序编号那么其编号与同样深度的满二叉树的节点编号在二叉树的位置相同,那么他就是完全二叉树,也就是说他的叶子几点只可能出现在最下边的两层,他的深度等于满二叉的深度,但他的节点一定少于等于满二叉树的节点个数,但一定多与2k-1-1,2k-1-1第度数为k-1层的满二叉树的节点个数,那么n就满足2k-1-1<n<=2k-1,由于n为整数那么n<=2k..原创 2020-11-17 14:55:45 · 1121 阅读 · 0 评论 -
字符串查找---KMP算法 优化next数组
#include <stdlib.h>#include <stdio.h>int getNextVal(char *partner, int *next){ int i = 0; int j = -1; next[i] = j; int plen = strlen(partner); while (i < plen) { if (j == -1 || partner[i] == partner[j]) { i++; j++; i.原创 2020-11-17 11:41:18 · 133 阅读 · 0 评论 -
KMP算法 next数组求解详解
next数组的求解方法是:第一位的next值为0,第二位的next值为1,后面求解每一位的next值时,根据前一位进行比较。首先将前一位与其next值对应的内容进行比较,如果相等,则该位的next值就是前一位的next值加上1;如果不等,向前继续寻找next值对应的内容来与前一位进行比较,直到找到某个位上内容的next值对应的内容与前一位相等为止,则这个位对应的值加上1即为需求的next值;如果找到第一位都没有找到与前一位相等的内容,那么需求的位上的next值即为1。这段话一开始看了好几遍都没彻原创 2020-11-16 19:51:30 · 3393 阅读 · 1 评论 -
字符串查找-----BF算法
/* 字符串查找 朴素*/#include <stdlib.h>#include <stdio.h>int strfind(char *str, char *partner){ int pos = -1; int i = 0; int j = 0; size_t slen = strlen(str); size_t plen = strlen(partner); while (i < slen && j < plen) {.原创 2020-11-16 15:48:58 · 234 阅读 · 0 评论 -
数据结构--队列(不带头结点)
/* 队列 链式存储结构*/#include <stdlib.h>#include <stdio.h>#define ERROR -1#define OK 0typedef int ElemType;typedef struct Node { ElemType value; struct Node *next;}Node;typedef struct LinkQueue{ Node *front; Node *rear; int count;.原创 2020-11-16 10:46:06 · 702 阅读 · 0 评论 -
数据结构---循环队列
/* 循环队列 顺序存储结构*/#include <stdlib.h>#include <stdio.h>#define ERROR -1#define OK 0typedef int ElemType;typedef struct RingQueue{ ElemType *base; int front; int rear; int rq_size;}RingQueue;int initRingQueue(RingQueue *rq,int.原创 2020-11-13 14:54:27 · 397 阅读 · 4 评论 -
数据结构---队列(带头结点)
/* 队列 链式存储结构*/#include <stdlib.h>#include <stdio.h>#define ERROR -1#define OK 0typedef int ElemType;typedef struct Node{ ElemType value; struct Node *next;}Node;typedef struct LinkQueue{ Node *front; Node *...原创 2020-11-13 14:48:52 · 220 阅读 · 0 评论 -
数据结构---静态链表
用数组描述的链表 就是静态链表 也叫做游标实现法#define MAX_SIZE 100typedef struct Node{ int value; int cur;}Node,StaticList[MAX_SIZE];数组的第一个和最后一个元素作特殊处理,不存放数据下标0的元素的cur 存放的是备用链表的第一个节点的下标下标max-1的元素的cur存放的是第一个有数值的元素下标,相当于单链表的头结点的作用,当链表为空时 则为0...原创 2020-11-25 19:51:56 · 100 阅读 · 0 评论 -
数据结构---栈(顺序存储)
栈是限定仅在表尾进行插入(push)和删除(pop)操作的线性表Last in First Out LIFO 线性表的特例#include <stdio.h>#include <stdlib.h>#include <assert.h>#define MAX_SIZE 5#define ERROR 0#define OK 1typedef struct Node{ int data[MAX_SIZE]; int top;}SqSta...原创 2020-11-26 11:11:21 · 94 阅读 · 0 评论 -
数据结构---栈(链式存储)
#include <stdio.h>#include <stdlib.h>#include <assert.h>#define ERROR 0#define OK 1typedef struct Node{ int data; struct Node *next;}Node;typedef struct LinkStack{ Node *top; int count;}LinkStack;int push(LinkStack *sta.原创 2020-11-26 11:30:07 · 101 阅读 · 0 评论 -
数据结构---栈的应用(递归)
int fbi(int n){ if (n == 0 || n == 1) { return 1; } else { return fbi(n - 1) + fbi(n - 2); }}int fbitail(int n,int a,int b){ if (n == 0) { return b; } else { return fbitail(n - 1, b, a + b); }}int facttail(int n, int a){ if (.原创 2020-11-26 11:55:37 · 88 阅读 · 0 评论 -
数据结构---中缀表达式转后缀表达式
#include <stdio.h>#include <stdlib.h>#include <assert.h>#define ElemType char#define ERROR -1#define OK 0typedef struct Node{ ElemType value; struct Node *next;}Node;typedef struct LinkStack{ Node *top; int count;}LinkSt.原创 2020-11-26 20:22:14 · 112 阅读 · 0 评论 -
数据结构---二叉树遍历
#include <stdio.h>#include <stdlib.h>typedef struct TreeNode{ int value; struct TreeNode *left; struct TreeNode *right;}TreeNode;typedef struct QNode { TreeNode *value; struct QNode *next;}QNode;typedef struct LinkQueue{ QNod.原创 2020-12-02 18:31:54 · 100 阅读 · 0 评论 -
c语言
当你知道指针和数组的区别,指针和引用的区别,指针的步长,什么是指针数组,什么是数组指针,数组[]和指针的转换后,这些都不是问题原创 2020-12-03 10:55:30 · 97 阅读 · 0 评论