- 博客(44)
- 收藏
- 关注
原创 有关线程调度问题
有关线程调度问题下列关于线程调度的叙述中,错误的是:( E )A. 调用线程的sleep()方法,可以使比当前线程优先级低的线程获得运行机会B. 调用线程的yield()方法,只会使与当前线程相同优先级的线程获得运行机会C. 当有比当前线程优先级高的线程出现时,高优先级的线程将抢占CPU并运行D. 一个线程由于某些原因进入阻塞状态,会放弃CPU
2018-02-02 11:13:46
470
原创 static关键字
内存的存储方式1.从静态存储区域分配内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。静态分配的区域的生命期是整个软件运行期,就是说从软件运行开始到软件终止退出。只有软件终止运行后,这块内存才会被系统回收。2.栈上分配相关代码执行时创建,执行结束时被自动释放。局部变量在此存储。栈内存分配运算内置于处理器的指
2018-02-01 20:47:23
218
原创 关键字static/const的作用
关键字static1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区)。2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
2018-01-30 10:48:18
237
原创 归并排序
利用递归与分治技术将数据序列划分为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列。原理如下:对于给定的一组记录,首先将两个相邻的长度为1的子序列进行归并,得到n/2个长度为2或者1的有序子序列,在将其两两归并,反复执行此过程,直到得到一个有序的序列为止。#include #include void Merge(int array[
2018-01-26 20:22:55
198
原创 堆排序
堆排序是将序列人为的类比做堆来处理,分为大堆和小堆,大堆就是双亲结点大于孩子结点,这里的孩子自身可能也是“双亲”,那么这个“双亲”还要大于它的孩子,小堆于此相反。 当所有结点满足这个大堆的条件后,最上面的根节点肯定是这个序列中最大的数,然后我们将这个数与最后一个结点交换,再对除了最后一个结点外的所有结点进行大堆处理,依次反复,最终会将这个序列排成从小到大的顺序。首先将序列按
2018-01-25 20:20:07
196
原创 基数排序
基数排序(Radix Sorting)是一种借助多关键字排序的思想对单逻辑关键字进行关系的方法。基数排序不需要进行记录关键字间的比较。主要分为两个过程: (1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)(2)收集,再将放置在0~9号桶中的数据按顺序放到数组中 基数排序的特点:稳 定 性:稳定时
2018-01-24 20:01:02
304
原创 面试题
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。代码#include using namespace std;//右上角查找法bool Find(int *arr, int rows, int columns, int num){ bool
2018-01-24 14:15:01
213
原创 简单选择排序
简单选择排序是一种简单直观的排序算法,他的基本原理是:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将记录与第一个记录的位置进行交换;接着对不包括第一个记录以外的其他记录进行第二轮排序,得到最小的记录并与第二个记录进行位置交换;重负该过程,直到进行比较的记录只有一个为止。简单选择排序特点:最 大 特 点:移动次数少。时间复杂度:总共比较 n(n-1)/2 次 ,移动次数最
2018-01-24 10:54:41
292
原创 用UDP实现简易的聊天室
由于UDP封装函数较少,所以我没有用封装函数头文件#ifndef _CHAT_H_#define _CHAT_H_#include #include #include #include #include #include #include #include #include #include #include
2018-01-20 15:34:53
392
原创 用UDP实现简易的聊天室
由于UDP封装函数较少,所以我没有用封装函数头文件#ifndef _CHAT_H_#define _CHAT_H_#include <stdio.h> #include <sqlite3.h> #include <sys/types.h> #include <sys/socket.h> #include <string.h> #include <strings.h> #in
2018-01-20 15:19:08
1227
原创 快速排序
快速排序是一种非常高效的排序方法,采用“分而治之”的思想,把大的拆分为小的,小的在拆分为更小的。原理是:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前部分的所有记录均比后部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均为有序为止。快速排序特点:稳 定 性:不稳定平均时间复杂度: O(n
2018-01-08 21:26:26
209
原创 多个客户端之间的通信
服务器#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdlib.h>#include <string.h>#include<pthread.h>#d
2017-12-12 15:40:44
526
1
原创 服务器和客户端的通信
服务器#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdlib.h>#include <string.h>#define PORT 8888int
2017-12-12 15:27:10
299
原创 linux网络编程
网络模型TCP/IP协议族TCP/IP 实际上一个协同工作的通信家族,为网络数据通信提供通路。为讨论方便可TCP/IP 协议组大体上分为三部分: 1、Internet 协议(IP) 2、传输控制协议(TCP)和用户数据报协议(UDP) 3、处于 TCP 和 UDP 之上的一组应用协议。它们包括:TELNET,文件传送协议(FTP),域名服务(DNS
2017-12-10 20:07:35
161
原创 线程
进程:(1)进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元; (2)进程是程序执行时的一个实例,即它是程序已经执行到某种程度的数据结构的汇集。 (3)从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。 (4)Linux系统是一个多进程的系统,它的进程之间具有并行性、互不干扰等特点,每个进程都是一个独立的运行单位,拥有各自的权
2017-12-09 21:17:29
228
原创 进程间通信方式2
六、消息队列 unix早期通信机制之一的信号能够传送的信息量有限,管道则只能传送无格式的字节流,这无疑会给应用程序开发带来不便。消息队列(也叫做报文队列)则克服了这些缺点。 消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式。 进程可以向其中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息。 消息队列分两种: POSIX消息队列以及系统V消息队列 系统V
2017-12-07 19:04:34
126
原创 进程间通信方式
一、进程间通信的目的 1、数据传输 2、共享数据 3、通知事件 4、资源共享 5、进程控制二、linux进程间通信方式简介 Linux下进程间通信的几种主要方式: (1)管道(Pipe)和有名管道(FIFO) (2)信号(Signal) (3)消息队列 (4)共享内存(Shared Memory) (5)信号量(Semaphore) (6)套接字(Socket)三、管道通信
2017-12-07 14:05:42
199
原创 linux进程控制编程
一、进程与程序 程序是放到磁盘的可执行文件 进程是指程序执行的实例 进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁移;而程序通常对应着文件、静态和可以复制。 进程是暂时的,程序使长久的:进程是一个状态变化的过程,程序可长久保存。 进程与程序组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)。 进程与程序的对应关
2017-12-06 21:32:39
243
原创 linux文件编程
一、系统调用 所谓系统调用是指操作系统提供给用户的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的的服务。 由于在Linux中,为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不同的级别上,在逻辑上是相互隔离的。 因此,用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作
2017-12-06 20:03:05
291
原创 插入排序
插入排序有两种:1.直接插入排序对于给定的一组记录,初始时假定第一个记录自成一个有序的序列,其余的记录为无序序列;接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列为止。#include void InsertSort(int par_array[], int array_size){ int i, j;
2017-12-05 20:36:13
180
原创 链栈的一些操作
头文件#ifndef _LINKSTACK_H_#define _LINKSTACH_H_#define SUCCESS 10000#define FAILURE 10001typedef int ElemType;struct node{ ElemType data; struct node *next;};typedef struct node Node;type
2017-12-04 13:15:16
173
原创 链队的一些操作
头文件#ifndef _LINKQUEUE_H_#define _LINKQUEUE_H_#define SUCCESS 10000#define FAILURE 10001typedef int ElemType;typedef struct node{ ElemType data; struct node *next;}Node;typedef struct queue
2017-12-04 13:06:46
276
原创 链表的一些操作
头文件#ifndef _LINKLIST_H_#define _LINKLIST_H_#define SUCCESS 1000001#define FAILURE 1000002#define TRUE 1000003#define FALSE 1000004typedef int ElemType;struct node{ ElemTyp
2017-12-04 13:00:51
123
原创 线性表的一些简单操作
头文件#ifndef _SEQUENCE_H_#define _SEQUENCE_H_#define MAXSIZE 20#define FAILURE 1000000#define SUCCESS 1000001#define TRUE 1000002#define FALSE 1000003typedef int E
2017-12-04 12:48:37
174
原创 c/c++小题目总结2
1、sizeof和strlen有哪些区别?区别如下:(1)sizeof是操作符,strlen是函数。(2)sizeof操作符的结果类型是size_t,它在头文件中typedef为unsignedint类型,该类型保证能容纳实现所建立的最大对象的字节大小。(3)sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以“\0”结尾的。(4)数组做size
2017-12-04 10:00:33
171
原创 一些c/c++小题目的总结1
1、一般赋值语句的概念和方法。求下程序输出:#include int main() { int x, y = 3, z = 4; x = (y = z); printf("x = %d\n", x); x = (y == z); printf("x = %d\n", x); x = (y | z); printf("x =
2017-12-04 09:59:40
221
原创 杨辉三角
学习了队列之后我用队列写了一个实现杨辉三角的程序头文件#ifndef _SEQUEUE_H_#define _SEQUEUE_H_#define MAXSIZE 10#define SUCCESS 10000#define FAILURE 10001typedef int ElemType;struct sequeue{ ElemType data[MAXSIZE]; int
2017-12-01 20:42:16
187
原创 用链表,栈,队列实现简单的停车场项目
学习了链表,栈,队列之后写了一个停车场项目,但是功能还不是太完善,时间忘了插入,通过咨询别人,完善了时间函数,完成了这个项目。问题描述:停车场是一个能放 n 辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放。若车场满了,车要停在门外的便道上等候,一旦有车走,则便道上第一辆车进入。当停车场中的车离开时,由于通道窄,在它后面的车 要先退出,待它走后在依次进入。汽车离开时按停放时间收费。基
2017-11-30 10:48:06
1060
1
原创 用链表实现简单的通讯录功能
学习了链表后我用链表写了一个简单的通讯录程序,主要能实现以下功能使用链表实现增加(在增加人员的过程中有一个自动排序功能,比如按姓名排序)、删除、修改、查找的功能;(1)添加用户信息(号码长度 号码是否重复)(2)列出好友信息(按姓名排序)(3)查找好友信息(按姓名查找)(4)删除好友(5)退出#ifndef _ADDRESS_H_#define
2017-11-30 10:04:36
4109
2
原创 用栈实现简单的四则运算
#include#include#define OK 10000#define ERROR 10001struct node{ int data; struct node *next;};typedef struct node Node;struct stack{ Node *top; int count;};typedef struct stack Stack
2017-11-25 20:17:52
3685
2
原创 结构体
声明一个结构体类型的一般形式为: struct 结构体名 {成员表列};如:struct student { int num; char name[20]; char sex; int age; float score;
2017-11-20 16:51:44
196
原创 小知识点整理
3G用户态分为五部分:BSS:用来存放未初始化的全局静态变量,程序结束释放空间。如static声明的变量。数据段:存放初始化的全局变量。代码段:存放代码和常量。堆:malloc函数,是由用户管理的。栈:局部变量,形参,是由操作系统管理的,自动释放。sataic修饰局部变量,改变变量声明周期至程序结束 修饰全局变量和函数时,限定作用域只在当前文件
2017-11-20 16:35:57
186
原创 常用库函数的学习
1. puts函数其一般形式为: puts (字符数组)其作用是将一个字符串(以′\0′结束的字符序列)输出到终端。用puts函数输出的字符串中可以包含转义字符。2.gets函数其一般形式为:gets(字符数组) 其作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。
2017-11-20 15:39:44
339
原创 指针部分知识
1.指针是什么?起什么作用?指针是变量的一种,里面是一个地址,通过这个地址找到要找的数据。实质:单元的地址就是指针内容。2. 指针运算符 &是取地址的运算符,*是表示指针运算符3.指针作函数参数函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。作用是将变量的地址传送到另一个函数中。4.指针的运算--赋值运算
2017-11-20 15:26:10
215
原创 随机发牌程序
#include #include#includeint main(){int flag[52],i,n;srand((unsigned int)time(NULL));for(i=0;i{n=rand()%52;while (flag[n]==1){n = rand()%52;}flag[n] == 1;if (n>=0 &&n
2017-11-16 18:57:25
1183
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人