- 博客(40)
- 收藏
- 关注
原创 找第K小数
int SelectK(int *ar , int left , int right , int k){ if(left == right && k == 1) { return ar[left]; } else { int index = Partition(ar , left , right); int pos = index - left + 1; if(k <= pos) return SelectK(ar , left , index , k).
2020-12-06 11:23:00
80
原创 快排
//单向快排int Partition(int *ar , int left , int right){ int i = left - 1 , j = left; int tmp = ar[j]; while(j <= right) { if(ar[j] <= tmp) { std::swap(ar[i+1] , ar[j]); i+=1; } j+=1; } std::swap(ar[left] , ar[i]); return .
2020-12-06 11:21:50
85
原创 分治策略——全排列
//全排列void Perm(vector<int> & br , int k , int m){ if(k == m) { for(auto& x : br) { cout<< x << " "; } cout<<endl; } else { for(int j = k ; j <= m ; ++j) { swap(br[j] , br[k]); Perm(br , k+1 ,.
2020-12-06 09:10:19
118
原创 C++常引用、右值引用
常引用:const int &x = 10; // int tmp = 10; const int &x = tmp;不能通过 x 改变 tmp 的值右值引用:int && c = 10; // int tmp = 10; int &c = tmp;可以通过 c 改变 tmp 的值
2020-12-03 13:26:51
291
原创 进程间通信
22:21:57int main(){ int fd = open("./fifo",O_WRONLY); assert( fd != -1); printf("open fifo\n"); while (1) { char buff[128] = {0}; fgets(buff,128,stdin); if ( strncmp(buff,"end",3) == 0) { ..
2020-12-01 22:24:06
61
原创 AVL
左单旋转void RotateLeft(AVLNode *&ptr){ AVLNode *newroot = ptr->rightchild; newroot->parent = ptr->parent; ptr->rightchild= newroot->leftchild; if(newroot->leftchild != NULL) { newroot->->leftchild->parent
2020-12-01 22:01:35
225
原创 二插排序树(BST)基本操作
中序遍历void NiceInOrder(BSTree &myt){ for(BstNode *p = First(myt.root) ; p != NULL ; p = Next(p)) { cout<<p->data<<" "; } cout<<endl;}逆置中序遍历void ResNiceInOrder(BSTree &myt){ for(BstNode *p = Last(myt.root) ; p !=
2020-12-01 22:00:34
60
原创 虚函数与纯虚函数的区别
一、虚函数1.定义:虚函数是一个类的成员函数。2.定义格式如下: virtual 返回类型 函数名(参数表)(关键字virtual指明该成员函数为虚函数。virtual仅用于类定义中,如虚函数在类外定义,不可加virtual)3.当某一个类的一个类成员函数被定义为虚函数,则由该类派生出来的所有派生类中,该函数始终保持虚函数的特征。4.当在派生类中重新定义虚函数(overriding a virtual function,亦译作超载或覆盖)时,不必加关键字virtual。但重新定义时不仅要同名
2020-11-28 21:32:49
557
原创 契波那切数列
//非递归int fun(int n){ int a = 1 ,b = 1 ,c = 1; for(int i = 3 ; i<= 0 ; ++i) { c = a + b; b = a; a = c; } return c;}//递归int fun(int n){ if(n <= 2) return 1; else return fun(n - 1) + fun(n - 2);}
2020-11-25 21:33:11
653
原创 二分查找
int FindValue(const vector<int> &vec , int val){ int left = 0 ,right = vec.size - 1; int pos = -1; while(left <= right) { //int mid = (right + left) / 2; int mid = (right - left) / 2 +left; //优化 if(val < vec[mid]) .
2020-11-25 12:52:29
46
原创 二叉树的基本操作
//二叉树结点个数int GetSize(BtNode *ptr){ if(ptr == nullptr) return 0; else return GetSize(ptr->leftchild) + GetSize(ptr->rightchild) +1;}//二叉树的深度int Get_Depth(BtNode *ptr){ if(ptr == nullptr) return 0; else return std::max(Get_Depth(ptr->le.
2020-11-25 12:32:26
109
原创 链式队列基本操作
//结构定义typedef int ElemTypetypedef struct Node{ ElemType data; struct Node *next;}ListNode;typedef struct que{ ListNode *front; ListNode *rear;}ListQue;//初始化void InitListQue(ListQue *que){ if(que == NULL) exit(0); que->fron.
2020-11-12 13:56:00
72
原创 顺序循环队列基本操作
//结构定义typedef int ElemTypetypedef struct queue{ ElemType *data; int size; int front; int rear;}Queue;//初始化void InitQueue(Queue *que){ if(que == NULL) exit(0); que->data = (ElemType *)malloc(sizeof(ElemType)); if(que-&.
2020-11-12 12:57:49
123
原创 中缀表达式转后缀表达式
中缀表达式:操作符在两个操作数中间后缀表达式:操作符在两个操作数后面例:” 9+(3-1)×3+10÷2 “ 20 “ 9 3 1 - 3 * + 10 2 / + ” 逆波兰表达式规则:(1)如果是数字,则直接输出 (2)如果是左括号直接入栈 (3)如果是右括号,出栈,直到遇到第一个左括号 (4)如果是 * 或者 / ,出栈,直到栈空或者左括号遇到 + - ,当前符号入栈 (5)如...
2020-11-11 15:09:38
43
原创 顺序栈的基本操作
//定义结构#define INITSIZE 10;typedef int ElemType;typedef struct stack { ElemType *data; //栈底指针 int top; //栈顶指针 -- 以数组下标来表示 int size; // 栈空间大小}stack;//初始化void InitStack(Stack *st){ if(st == NULL) exit(0); st->data = (ElemType *)malloc(.
2020-11-10 13:53:32
49
原创 Hash基本操作
//结构定义#define HASHNUM 13typedef unsigned int KeyType;typedef struct {}DataType;typedef struct HashNode{ KeyType key; DataType data; HashNode *next;}HashNode ;typedef struct Hash{ HashNode *hashTable[HASHNUM];}Hash;//初始化void In.
2020-11-07 16:33:11
287
原创 双向链表基本操作
//结点类型typedef int ElemType{ ElemType data; struct Node *prior; struct Node *next;}DList;//初始化void InitDList(DList *head){ if(head == NULL) exit(0); head->next = head->prior = head;}//创建新结点static DList *_ApplyNode(ElemType val , DLis.
2020-11-05 20:37:56
61
原创 单链表的逆置
void ReverseLinkList(LinkList *list){ if(list == NULL || list->next ==NULL) return; LinkList *p = list->next; LinkList *q = p->next; list ->next =NULL; { while(p != NULL) { p->next = list->next; list->next = p; .
2020-11-05 15:18:48
50
原创 合并两个有序单链表,合并后依然有序。
void MegerLinkList(LinkList *list1 , LinkList *list2){ if(list1 == NULL && list2 == NULL) return NULL; LinkList *p = list1->next; LinkList *q = list2->next; LinkList *tail = list1; list2->next = NULL; while(p != NULL && .
2020-11-05 15:09:12
80
原创 判断单链表是否有环,如果有,返回第一个节点
LinkList *IsLoop(LinkList *list){ if(list == NULL) return NULL; LinkList *p = list , *q = list; while(p != NULL && p->next != NULL) { p = p->next->next; q = q->next; if(p == q) { break; } }}
2020-11-05 14:53:18
64
原创 判断两个单链表是否相交,如果相交返回第一个交点。
思路:三目运算符LinkList *Intersection(LinkList *List1, LinkList *list2){ if(list1 == NULL || list2 == NULL) return NULL; LinkList *p = list1 , *q = list2; while(p != q) { p = p->next == NULL ? list2 : p->next; q = q->next == NULL ? list1 :
2020-11-05 14:40:50
145
原创 单链表—找倒数第k个结点
思路:双指针,先让一个指针从开头走k次,然后两个指针同步向后走,直到之前的指针为空。LinkList *FindNodeOfk(LinkList *list , int k){ if(list == NULL) exit(0); LinkList *p = list , *q = list; while(k && q != NULL) { q=q->next; k--; } while(q != NULL) { p= p->next; .
2020-11-05 14:13:55
36
原创 单链表—O(1)删除非尾结点p
void DeleteLinkListNode(LinkList *list , LinkList *p){ if(list == NULL) exit(0); //如果p是尾结点,直接调用尾删 if(p->next ==NULL) { DeleteLinkListTail(list); return true; } LinkList *q=p->next;//q是将来真正删除的节点 p->data = q->data; p->next = q-&g.
2020-11-05 13:57:11
228
原创 不带头结点单链表基本操作
//结构声明typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next;}List;//初始化void InitList(List **list){ if(list == NULL) exit(0); *list = NULL;}//申请新结点static List_ApplyNode(ElemType val,List *next){ List *s =...
2020-11-04 16:16:34
105
原创 静态函数与非静态函数的区别
静态成员函数和非静态成员函数的根本区别在于有无this指针。非静态函数由对象名或者对象指针->调用,调用时编译器会向函数传递this指针静态成员函数则由类名::或者对象名调用非静态函数中有this指针,静态函数中没有this指针,不能访问对象的成员函数,成员函数有this指针,const修饰this指针,全局外部函数不能有const,因为没有this。...
2020-11-01 17:07:49
3048
原创 内存泄漏
内存泄漏(本质):从堆区申请空间,地址丢失。程序运行过程,申请了一块内存空间,使用完毕后没有释放掉。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个指针指向它,那么这块内存就泄露了。...
2020-11-01 16:55:27
35
原创 C++引用、指针
一、引用:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。二、引用的声明方法:类型标识符&引用名=目标变量名;例:charch;char&rp=ch;三、引用作为返回值(1)以引用的形式返回,不会构建临时空间。(2)生存期不受函数的影响,以引用的形式返回 例如:静态,全局变量。(3)不能返回局部变量的引用 原因:局部变量会在函数返回后被销毁,此时返回的引用就成了无所指的引用,程序会出错。...
2020-11-01 16:51:41
67
原创 C++构造函数、析构函数、拷贝构造函数
一、构造函数:构造函数在创建类对象时自动执行,通常用于一些数据的初始化工作,构造函数可以重载,有一个默认构造函数,一个类可以有多个构造函数。特性:(1)函数名与类名相同(2)没有返回值(3)构造函数不能被直接调用,必须在创建对象时才会自动调用且在对象的生命期内仅调用一次(4)有初始化列表(5)构造函数可以重载,实参决定了调用那个构造函数(6)如果没有显式定义时,编译器会提供一个默认的构造函数(7)无参构造函数和带有缺省值的构造函数都认为是缺省构造函数,并且缺省构造函数只能有一个(8)构
2020-11-01 16:42:25
100
原创 带头结点的单链表基本操作
#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<malloc.h>void InitLinkList (LinkList *head){ if(list == NULL) exit(0); list->next = NULL;}//初始化static LinkList *ApplyNode(ElemType val,LinkList *next)...
2020-10-31 20:39:18
161
原创 求阶乘后的0
题目:给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.说明: 你算法的时间复杂度应为 O(log n) 。思路:1.什么情况下会产生0 25=106!=123456=7202.找出有2/5的个数 4=2*2 没有03.所以要找出5出现的次数,5出现的次数比2少,有几个5就有几个0。代码:...
2020-10-22 16:16:44
76
原创 僵死进程和孤儿进程
1.僵死进程:子进程先于父进程结束,父进程没有获取子进程的退出码。2.父进程先结束,不会产生僵死进程。3.父进程结束,子进程变成孤儿进程,会被init进程收养4.解决方法:wait()
2020-10-12 20:26:17
36
原创 程序编译链接过程
一.预编译 .i1.删除#define,并做文本替换2.#include递归展开头文件3.#if#endif#elif处理4.删除注释5.添加行号文件标识6.保留#program二.编译 . s1.词法分析2.语法分析3.语义分析4.代码优化5.生成汇编语言三.汇编 .o翻译指令1.强弱符号2.外部符号四.链接五.运行...
2020-09-26 21:53:35
67
原创 gdb 调试命令
l 显示代码b 加断点info break 查看断点信息r 运行程序,启动调试p 打印 变量的值bt 函数调用栈关系 A-B-Cs 进入函数finish 退出函数q 退出调试c 继续执行b+函数名 加断点l filename : n 跳转到filename文件的第n行...
2020-09-26 21:25:26
40
原创 字符串的复制,长度,连接问题
//复制#include<stdio.h>#include<string.h>void Mystrcpy(char *des,const char *src){ while(*des++ = *src++);}int main(){ char arr[10]; char brr[15]="abcde"; Mystrcpy(arr,brr); prin...
2019-10-26 20:22:24
122
原创 浮点数的比较,浮点数存在误差
#include<stdio.h>#include<math.h>#include<float.h>void Fun(double a,double b,double c)#define EPS 0.00001{ double x1; double x2; double d=bb-4ac;...
2019-10-24 19:37:04
246
原创 Swap用指针交换两个数
void swap(int *p1,int *p2){int tmp;tmp=*p1;*p1=*p2;*p2=tmp;}int main(){int a=10;int b=20;printf("%d%d\n",a,b);Swap(&a,&b);printf("%d%d\n",a,b);}总结:子函数的改变要想影响到父函数,必须传指针,必须解引用。...
2019-10-24 14:32:26
158
原创 假设在n进制下,下面的等式成立,567*456=150216,求n的值。
假设在n进制下,下面的等式成立,567456=150216,n的值为(D)A.9 B.10 C.12 D.18(5n2+6n1+7n0)(4n2+5n1+6n0)=n5+5n4+0n3+2n3+n1+6n0 (5n2+6n1+7)(4n2+5n1+6)=n...
2019-10-17 19:40:29
179
原创 任给一个整数(1)输出它是几位数(2)正序输出各位数字(3)逆序输出各位数字
/(1)求出它是几位数#include<stdio.h>int Count(int n){int tmp = 0;if(n == 0){return 1;}while(n != 0){tmp++;n/=10;}printf("%d\n",tmp);return tmp;}int main(){Count();return 0;}//(2)正序...
2019-10-11 13:58:59
235
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人