目前实现的功能:能够计算成真赋值,可以将任意合法命题公式化为主范式,可以输出真值表 目前bug : 不能对输入的命题公式检验合法性,如果不合法,运行结果是不确定的,程序崩溃,结果错误。 参考资料:波兰式或后缀表达式(百度),栈的使用。 实现原理: 直接实现命题公式的化简比较困难,但是可以先计算成真赋值和成假赋值,再根据成真赋值生成主范式就比较简单了, 计算成真赋值就是将命题变元提取,然后分别赋以一定的值,然后类似于上一篇文章《 C语言写科学计算器》 ,通过数字栈和符号栈的压栈和弹栈操作实现不同级别的运算符运算顺序。…

2020年04月03日 1条评论 208点热度 4人点赞 阅读全文

    目前实现的功能有:加,减,乘,除,乘方,三角函数(sin,cos,tan,sec,csc,cot),ln函数,支持括号,支持负数,数学常量(e,PI)     目前bug:不能进行算式的有效性检验(如1*-1就是不合法的应为1*(-1)),无效的算式将得到不确定的结果,有可能造成程序崩溃,结果错误等。 参考资料:波兰式或后缀表达式(百度),栈的使用。 运行截图: 代码: 编译环境:Windows visual studio 2019 代码仅供参考 , 运算错误表怪我。(今天是愚人节,代码你还敢信吗 )

2020年04月01日 2条评论 317点热度 7人点赞 阅读全文

基数排序是利用空间性能换取时间性能的一种排序算法,它的时间复杂度为O(nlog(r)m)   空间复杂度为O(n+r),是一种稳定的排序算法 直接上代码。 int getMaxDigit(int arr[],int n) { int i,max = *arr; for (i = 0; i < n; i++) { if (arr[i] > max) { max = arr[i]; } } for (i = 0; max; i++) { max /= 10; } return i; } void Radix…

2020年02月20日 1条评论 494点热度 3人点赞 阅读全文

堆排序是利用堆的性质进行排序的排序方式,时间复杂度O (nlgn),空间复杂度O(1),是一种原地排序算法。 首先 你需要知道什么是树,什么是二叉树,以及什么是完全二叉树 堆是一种特殊的完全二叉树,堆分为大顶堆和小顶堆,大顶堆要求每个节点的子节点(如果有),必须小于父节点,整个树的根节点是最大的,小顶堆相反,每个子节点比父节点大,根节点是最小的节点。 我们以大顶堆为例,以下是几个大顶堆。 按顺序给第一个堆的每个节点编上号如下图 所以就可以用一个数组进行储存; int arr[] = {10,5,7,3,4}; 假如…

2020年02月19日 1条评论 430点热度 1人点赞 阅读全文

当遇到从某一字符串中匹配另一个字符串的时候就要用到这个算法 1.暴力匹配 s是主串要从s中搜索出p子串的位置 ,如果搜索失败返回-1  ,下面是暴力算法的步骤 1.i从s的头部开始依次向后遍历 2.匹配以i开头的s的子串能不能与p匹配,如果匹配返回i,不匹配继续查找; c语言代码 int search(char* s,char* p) { int i,j; for (i = 0; s[i]; i++) { for (j = 0; p[j]&&p[j] == s[i + j]; j++); if (p…

2020年02月16日 0条评论 192点热度 2人点赞 阅读全文

预编译指令: #include<sys/types.h> #include<sys/socket.h> tcp通信分为两部分 ,服务端和客户端; 1.创建socket 创建socket在客户端和服务端都有,套接字是用来通信的接口,收发数据都要通过socket来实现,创建套接字要用到socket函数。 Linux下一切设备,文件,链接都是文件,所以socket也是一个文件,同时Linux下如果程序打开文件的话,那么这个打开的文件就可以用一个int类型的代号表示,这个就是文件描述符。每个进程都有…

2020年01月21日 0条评论 247点热度 3人点赞 阅读全文

在阅读本文章之前请确保你已经掌握了递归思想。 归并排序采用了一种分治的思想。时间复杂度为O(n log n)空间复杂度为O(n),是一种稳定的排序算法,它的速度仅次于快速排序。整个过程分为划分和合并两个部分 归并排序的步骤: 1.检查数组的元素数,如果元素数大于等于2就可以视为两个数组。(划分) 2.将数组划分为两部分,分别对两部分分别进行归并排序。(划分并排序,递归) 3.对排序好的两部分进行合并得到最终的有序数组。(合并) 还是举个栗子,我有一组数8 7 6 5 4 3 2 1: 这个过程也是一个自顶向下逐步划…

2020年01月13日 1条评论 299点热度 4人点赞 阅读全文

1.插入排序 插入排序,顾名思义是将一个数取出再插入到数组中合适位置,通过多次插入使得数组呈有序状态的一种排序算法. 时间复杂度:O(n^2),被称为最稳定的排序算法,它适用于数据量较少的排序. 算法步骤(从小到大): 将数组视作两部分,一部分有序一部分无序,初始时有序部分为左边第一个元素. 选择有序部分后一个元素将其取出,将其与有序部分最后一个元素比较,有序部分最后一个元素大于该元素,就将有序部分最后一个元素后移,然后该元素继续与有序部分前一个元素对比,直到找到有序部分某个元素小于该元素或到达有序部分最前端,就插…

2020年01月07日 0条评论 238点热度 2人点赞 阅读全文

在阅读本文章前请确定你已经掌握递归的思想 快速排序是一种高效的排序方式,它的时间复杂度最差情况是O(n2) ,理想情况O(nlog2n),正是因为它的高效,该排序方法被认为是目前最好的一种内部排序方法,对于初学者来说理解可能有难度. 快速排序的大致步骤: 1.选取一个划分标准(一般选择最左边的值). 2.通过某种算法(暂时忽略这个算法的实现)将数组以标准值划分为两部分,左边的都小于或等于标准值,右边的都大于或等于标准值. 3.分别将标准值两边看做两个新数组,将新数组进行上述过程。 4.直到划分到元素总数小于2就返回…

2020年01月07日 0条评论 459点热度 4人点赞 阅读全文

  ASCII码         先来了解一下ASCII码,你可以这样理解:计算机中任何数据的储存都是用二进制数来表示,而任何数字形式(例如123,456这样的数字)都可以化为二进制数,这样的数字想要储存可以直接通过转化为二进制形式保存,但是,我想要储存一个“s”这个字母呢?它本身不代表任何数字,也不能被直接转化为二进制数,计算机的世界里全都是数字,没有字符这个奇怪的东西,后来人们想到一个简单的方法,将字符编上号就例如我把'a…

2020年01月04日 0条评论 209点热度 4人点赞 阅读全文