- 博客(37)
- 问答 (1)
- 收藏
- 关注
原创 线性表链式存储结构,链表
单链表,我们可以用c语言的结构指针来描述typedef struct LNode{ ElemType data; struct LNode *next;}LNode, *LinkList;从这个结构指针中我们可以得出,单链表的结点是由存放数据的数据域和存放后继结点地址的指针域组成。获得链表第i个数据的算法思路:声明一个指针p指向链表的第一个结点,初始化j从1开始;当j<i时,就遍历链表,让p的指针向后移动,不断指向下一个结点,j累加1;若到链表末尾p为空,则说明第i
2020-11-22 22:49:57
191
原创 顺序存储结构,顺序表
描述顺序存储结构的所需的三个属性:存储空间的起始位置线性表的当前长度当前分配的存储容量typedef struct { ElemType *elem; int length; int listsize;}SqList;插入算法的思路:如果插入位置不合理,抛出异常;如果线性表长度大于等于存储空间的容量,则抛出异常或动态增加容量;从最后一个元素开始向前遍历到第i个位置,分别将他们都向后移动一个位置;将要插入元素填入位置i处;表长加1;Status Lis
2020-11-16 18:48:59
482
原创 算法的时间复杂度
算法时间复杂度的定义定义:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的复杂度就是算法的时间量度,记做:T(n)=O(f(n))。他表示随着问题规模n的增大,算法执行时间按的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度。其中f(n)是问题规模n的某个函数。这样用大O()记述时间复杂度的方法被称为大O记法。一般情况下,随着n的增大,T(n)增长最慢的算法为最优算法。(要注意是增长)推导大O阶方法1.用常数1取代
2020-11-09 15:51:53
444
原创 非线程安全与线程同步技术
非线程安全是指多线程操作用一个对象可能出现问题。线程安全就是多线程访问时,采用加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到这个线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能多个线程先后更改数据造成所得到的数据是脏数据。看下面这个例子: static int num = 0; ...
2020-02-10 16:58:01
209
原创 线程的容器——线程池
我们在创建或销毁一个线程时需要一定的内存开销,过多的使用线程会造成内存资源的浪费。为了解决这一问题,引入了线程池的概念。线程池里的线程是怎么工作的呢?当应用程序需要创建线程时,线程池会初始化一个线程,这个线程和其他的线程一样,但是使用完后不会自行销毁,而是以挂起的状态,回到线程池中,当应用程序再次对线程池发出请求时,线程池里挂起的线程会再度被激活。这样可以减少创建或销毁一个线程时需要的内存开销。...
2020-02-09 18:16:08
535
原创 构造有参数的线程
如果方法有参数的话,我们就需要ParameterizedThreadStart,转到定义可以看出ParameterizedThreadStart是一个委托,参数类型必须是Object类型。可以用线程的Start方法传入参数。 static void Worker(object data) { Thread.Sleep(1000); ...
2020-02-09 17:37:55
248
原创 将线程设置成后台线程
将线程设置成后台线程线程分为前台线程和后台线程.NET的CLR会区分这两种不同的线程,这两种线程的区别在于,应用程序必须等到前台线程全部运行完之后才可以退出;而对于后台线程,应用程序可以不考虑后台线程是否运行完毕直接退出,后台线程在应用程序退出时自动结束。所以后台线程用于处理时间较短的任务,比如在一个服务器利用后台线程处理客户端发来的请求信息。而前台线程一般用于需要长时间等待的任务,如在服...
2020-02-09 17:18:58
1475
原创 Windows窗体应用程序 button与radiobutton的小练习(C#)
选择左边的按钮,改变将要弹出信息框下面的按钮选项,选择右边的按钮改变信息框文字前的图标。下面的图片是示范代码如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;...
2018-09-25 22:04:41
2600
原创 竖式问题 C语言
题目: 找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但你的程序应该输出空格,而非小数点)。我刚开始看不懂这个题目,所以上论坛搜了一下,下面这个人的回答还是很清楚的...
2018-09-15 17:21:32
1831
原创 直接插入排序
直接插入算法 算法分析: 把一个数据插入到已经排好序的有序数列中,使整个序列在插入这个数据任然有序。插入的位置是要插入的数据与有序数列的各个数据从右向左比较其值大小决定的。 代码:#include<stdio.h>int insort(int s[], int n){ int i, j; for(i = 2; i <= n; i++) ...
2018-05-31 11:32:05
343
原创 冒泡排序算法
冒泡排序算法 算法分析: 有一组无序的数据,先比较第一个和第二个数,小的放前面,大的放后面,再比较第二个和第三个······以此类推。 代码:#include&lt;stdio.h&gt;int main(){ int a[10]; int i, j, k; printf("Enter ten number:\n"); for(i = 0; i ...
2018-05-29 22:11:22
152
原创 选择排序算法
选择排序算法 算法分析: 把从未排序的10个数据放入一个数组中a[ ]中,从a[0]到a[9]中找到最小的数据让它与a[0]交换,然后再从a[1]到a[9]中找到最小的数据,让它与a[1]交换·······,将一个无序数列变成有序数列。 代码:#include<stdio.h>int main(){ int i, j, m, k; int a[10]...
2018-05-28 17:36:07
184
原创 索引顺序查找(分块查找)算法
索引顺序查找(分块查找)算法算法分析:将n个数据元素按块有序的划分为m块(m不能大于n)。每一块的元素可以不是有序的,但块与块之间必须有序,第一块中的任一元素的关键字都必须小于第二块任一元素的关键字,第二块中的任一元素都要小于第三块中的任一元素······具体操作:1>先去各块的最大关键字构成索引表。 2>查找分为两部分,先对索引表进行二分查找或顺序查找,已确定待查...
2018-05-27 10:33:46
4932
原创 二分查找
二分查找(折半查找)算法 二分查找是将一个有序数列不断地缩小一半。#include<stdio.h>int main(){ int search(int a[],int n, int x); int i,x,z; int a[10]; printf("please enter ten number:"); for(i = 1; i ...
2018-05-26 17:18:18
173
原创 Github常用指令
名称 作用 cd 进入到一个目录 pwd 显示当前所在的目录 ls 将目录里的每个文件列出来 git init 把这个目录变成可管理的空仓库 git status 查看当前仓库的状态 git add 往仓库里加文件 git rm –cached 删除仓库中不需要的东西 git commit...
2018-02-23 21:50:19
159
原创 位运算
位运算:是指二进制位的运算。位运算符:“按位与”运算符(&) 和高中数学中“且”逻辑运算差不多,即:0&0=0,1&0=0,0&1=0,1&1=1。 例如3&5并不等于8,而是将3和8化成二进制,按照上面的运算规律逐一进行计算。 用途:(1)清零。若想将一个单位清零,找一个二进制数让它与其进行“与”的运算 ,这个二进制数要满足原来的...
2018-02-23 21:46:33
193
原创 链表的删除和插入
对链表的删除 假如一个动态链表有三个结点,分别是结点1, 结点2, 结点3。 要删除结点2,就把结点3的地址指向结点1中存放地址的成员。但并未把结点2将它从内存中删除。二是将它从链表中分离开来。 写一个函数删除动态链表中的指定结点。struct student *del(struct student * head, long num){ struct student *...
2018-02-23 21:45:42
347
原创 动态链表和静态链表
链表是一种动态分配内存的一种结构,可根据需要开辟所需的内存单元。 链表中有一个“头指针”的变量,它存放一个地址,该地址指向一个元素。链表中每个元素称为“结点”,每个结点包括两个部分,一是我们所需的实际数据,二是下一个结点的地址。最后一个元素不指向其他元素,被称为表尾。在其中放入一个“NULL”(空地址,表示链表结束。 要找到某一元素必须要找到上一个元素,根据上一元素提供的地址找下个元素。...
2018-02-23 21:45:15
478
原创 指向结构体类型数据的指针
#include <stdio.h>#include <string.h>int main(){struct student { long num; char name[20]; char sex; float score; }stu_1; struct student * p;...
2018-02-23 21:43:23
1127
原创 结构体数组及其应用
定义结构体数组 定义结构体数组和定义结构体相似,在变量名表列声明它是数组即可。 例如sturct student{int num;char name[20];char sex;char addr[30];}sturct student stu[3];或者直接定义一个结构体数组sturct student{int num;...}stu[3];stur...
2018-02-23 21:41:09
1262
原创 结构体变量的引用的一些说明
1.不能将整个结构体变量输入后输出,只能对结构体变量中各个成员进行输入和输出。 2.如果成员本身是结构体类型,要一级一级的将最低级的成员。并且只能对最低级的成员进行复制、存取后运算。 如:student1.birthday.month 3.结构体成员可以向其他变量一样进行运算。(如果他的类型可以)如:sum = student1.num + student2.num. student1.sc...
2018-02-23 21:40:15
2294
原创 结构体
11.1 概述 在c语言中有很多简单变量,但难以将他们相互建立联系,如下表 num name sex 10010 lijin M在程序中要用到表中的数据结构,但是C语言中没有现成的数据,我们就可以自己在程序中建立所需的结构体类型。 例如:struct student{int num; char name; char sex;}...
2018-02-23 21:35:25
186
原创 数组、字符串与指针
数组与指针指针变量既可以指向变量,当然也可以指向数组元素。(就是把数组元素的地址放入指针变量中。)数组元素的指针就是它的地址。有一个数组a[ ]和一个指针变量p,p = a,就是把数组a首元素的地址赋给指针变量p。 如果指针变量p已经指向数组中的某个元素,那么p+1不是p的值简单加一,而是指向同数组的下一个元素。p++, 先得到 * p 的值,再使 p+1;* ++p,先进行p+1的...
2018-02-23 21:34:31
148
原创 指针
地址和指针的概念地址当我们在程序中定义了一个变量之后,系统会给这个变量分配储存空间。不同的变量类型,系统分配的内存长度也不同,整型变量2个字节,浮点型变量4个字节,字符变量1个字节。内存区的每一个字节都有一个编号,就像宾馆房间号都有房间号一样,这就是地址。在内存中存放数据,就和房间里住了个人一样。对变量值的存取是通过地址实现的。比如说定义了整型变量i,编译时系统分配2000,2001这两...
2018-02-23 21:33:45
399
1
原创 预处理命令
在C程序中的“预处理命令”,是由ANSI C规定的,但不属于C语言的组成部分,因为编译程序不能识别他们,所以并不能直接对它们编译。在编译之前,程序需要对这些特殊的命令做些“预处理”。宏定义不带参数的宏定义 即用一个指定的标识符(即名字)来代表一个字符串,一般形式为#define 标识符 字符串#define PI 3.14在编译程序时的函数前定义PI,作用是在此程...
2018-02-23 21:32:54
275
原创 函数
一个较大的程序一般分为很多个程序模块,每个程序模块实现一个特定的功能。所有高级语言中都有子程序这个概念,用子程序实现模块的功能,而C语言中的子程序是用函数来完成的。一个C程序有一个主函数和很多其他函数组成,主函数可以调用其他函数,其他函数也可以相互调用。而且同一个函数可以被一个或多个函数调用任意次。C程序是从main函数开始的,如果是在函数中调用其他函数,调用后流程返回到main函数,在m...
2018-02-23 21:32:08
337
原创 循环控制
四种语句实现循环 goto while do···while for 一般形式 goto语句标点; while(表达式)语句; do 循环语句 while(表达式); for(循环变量赋初值;循环条件;循环变量增值)语句 特点 限制使用会使程序流程无规律可读性差 先判断表达式后执行语句 先执行语句后判断表达式 不仅可用...
2018-02-23 21:30:39
307
原创 字符数组的输入与输出
字符输入输出有两种办法。一是用”%c’’输入输出一个字符,二是,用“%s”将字符串一次输入或输出。scanf函数中的输入项如果是字符数组名,就不加地址符“&”。字符串处理函数 puts gets strcat strcpy strncpy strcmp strlen strlwr strupr 一般形式 puts(字符数...
2018-02-23 21:29:51
3041
原创 数组
数组数组是有序数据的集合。 C语言中无法表示上下标,就用方括号表示下标。一维、二维数组以及字符数组的第一和使用 一维数组 二维数组 字符数组 定义 类型说明符 数组名[常量表达式] 类型说明符 数组名[常量表达式][常量表达式] char c[常量表达式] 引用 int a[10];t=a[6],引用a数组中的6号元素。...
2018-02-23 21:28:57
192
原创 使用if语句编写程序
在适应if语句编写程序时,在解决比较复杂的问题时先将算法写下来,便于后面编写程序。写算法时仔细阅读题目中所给的条件,认真思考要怎么样解决题目中的问题。编写程序时避免语法上的错误,写完程序自己检查一下有没有存在漏洞。灵活运用if的三种形式、if语句的嵌套和switch语句。不同题目所需不同。输出最大数void main(){ int a, b, c; scan...
2018-02-23 21:27:15
5749
原创 选择结构程序设计
关系运算符和关系表达式关系运算是一种比较运算,如果满足给定的条件关系表达式的值是真,不满足则是假。关系运算符及优先次序 关系运算符低于算数运算符但高于赋值运算符。关系表达式 用关系运算符将两个表达式连接起来的式子。 关系表达式的值是一个逻辑值,及“真”或“假”。在C的逻辑运算中,1表示真,0表示假。逻辑运算符和逻辑表达式逻辑运算符 && 、||、!...
2018-02-23 21:25:02
225
原创 最简单的C程序设计——顺序程序设计
C语言的概述。C语言的语句都是用来完成一定操作任务的。一个函数包括声明部分和执行部分,执行部分是由语句组成的。即一个C程序可以由若干个源程序文件组成,一个源文件可以由若干个函数和预处理命令以及全局变量声明部分组成,函数由数据的声明部分和执行部分组成。 C语句分为五类:控制语句,if()···else··· 条件语句,for()···循环语句等等函数调用语句,由一个函数调用加一个分...
2018-02-23 21:24:15
834
原创 c语言运算符与表达式
在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。double←float ↑ long ↑unsigned ↑ int←char、short强制类型转换运算符void main() { float x; int i; x=32767.0; i=(int)x%3; printf("x=%f,i=...
2018-02-23 21:23:08
470
原创 C语言的数据类型
常量 变量 定义 在程序运行过程中,其值不能被改变的量。 变量代表具有特属性的一个存储单元,它用来存放数据,也就是变量的值。在程序运行期间,这些值可以改变的。 类型 整形常量:12、0、-3;实型常量:4.6、-1.23、;字符常量:’a”b’;符号常量:用一个标识符代表一个常量。 c语言规定的标识符只能由字母数字下划线3种字符组成...
2018-02-23 21:01:59
160
原创 程序的灵魂——算法
打个比方,厨师做一道菜肴,需要配料(数据结构),刀 叉等工具(语言)和操作步骤(算法)。 计算机算法分为两大类: 1.数值运算算法即求数值解。 2.非数值运算算法自然语言表示算法: S1:2000=i S2:若不能被4整除,则输出i不是闰年,然后转到S6 S3:如果i能被4整除,但不能被100整除,输出i是闰年然后转到S5 S4:如果i能被100整除,又能被4...
2018-02-23 21:01:05
248
原创 C程序设计-C语言概述
C语言数据类型有整形,浮点型,字符型,数组类型,指针类型,结构体类型,和共用类型等。 今天接触了整形,虽然不是很懂。1.C语言是由函数构成。 一个C源语言至少且仅有一个main函数组成,或由一个main函数和若干个其他函数组成。可以说函数是C语言的单位。 2.一个函数由两部分组成: 1.函数的首部,包括函数名,函数类型,函数参数名,参数类型。 一...
2018-02-23 21:00:07
164
空空如也
我在安装thrift时,进行./configure不成功?
2019-04-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人