- 博客(20)
- 资源 (12)
- 收藏
- 关注
原创 linux 进程通信之共享内存
一,创建共享内存void *shmat(int shmid, void *shmaddr, int shmflg);该系统调用将shmid 对应的共享内存区映射到进程的虚拟地址空间中,shmaddr 为指定的映射起始地址,其值为NULL 时,映射空间由系统确定;shmflg 为标志字,其值一般指定为0。/* * mkshm.c - Create and initialize shared me
2012-12-20 12:12:57 959
原创 linux 进程间通信之消息队列
一,创建消息队列:int msgget(key_t key, int flags);功能:若flags 中设置了IPC_CREAT 位,创建一个新队列,对应于key 的值。key 值为IPC_PRIVATE 时表明key 值由系统生成。若flags 中没有设置IPC_CREAT 位,打开对应于key 的已有队列。返回值为消息队列的id,系统关机以前全局有效。/*
2012-12-20 09:43:52 1006
原创 数据结构与算法之归并排序
归并排序思想:先分后合,每次合并的子数组序列是有序的时间复杂度:O(nlog2n),空间代价为O(n)代码如下:int a[10]={1,23,4,5,7,9,0,5,3,26},b[10]={0};void merge(const int left,const int mid,const int right){ int s1=left; int s2=mid; int s3
2012-12-15 01:26:40 724
原创 算法与数据结构之堆排序
一,线性的数组可以看成一个二差堆,堆中父节点与左孩子的关键码关系为:left=parent*2+1;堆排序思想:每次循环从二叉堆中将最大的元素shiftup上移至根节点,再将根节点与最后对末尾的元素交换。撇开末尾元素,如此再继续找出下一个最大元素,将此最大元素与此末尾元素交换。依此重复查找最大元素,然后交换。1.堆排序与插入排序思想有点类似。2.时间复杂度为nlog2(n);int
2012-12-14 23:17:25 747
原创 C/C++中整型数组的下标类型不一定为整型
C/C++中整型数组的下标类型不一定为整型,C C++语言下数组性质与散列有些类似,即散列中的键值对:下标即为关键码,关键码通过散列函数映射得到元素即为值下标可以为整型,也可以为字符型,简单案例如下:int main(){ int d[3]={0}; char a='a',b='b'; d[a]=1; d[b]=2; printf("%d,%d\n",d[a],d[b]
2012-12-14 17:27:54 4012
原创 二叉搜索树
一,二叉搜索树简单理解:二叉搜索树是基于二分法搜索实现快速搜索的树形数据结构特性:左子树的节点小于父节点和且小于右子树,父节点小于右子树 二,AVL树1. AVL树也是一种二叉搜索树。2. 为了进一步提高二叉搜索树的搜索效率,即减少树的平均搜索长度,故而需要尽量降低数的高度。3. AVL树要求任何节点左右子树高度的差值不超过1. 重点 :AVL树的插入.删除操
2012-12-12 23:39:39 707
原创 设计模式之适配器模式
适配器分两种:对象适配器,类适配器UML 对象适配器 类适配器 public interface Target { void request();}public class Adaptee { public void doSomeString(){ System.out.println("Apaptee do something
2012-12-12 22:41:44 646
原创 散列(Hash table)也称哈希表
一,与集合和字典的区别:集合和字典(线性表,二叉搜索树,AVL树,B树)中元素与关键码没有直接的对应的关系,而哈希表中元素与关键码有对应的关系,而这层关系通过哈希函数桥接,通过关键码映射到表中某个地址位置来搜索元素的方法速率更高,比较次数很少。二,散列1.散列的性质:.散列函数是一个压缩映像函数,关键码集合比散列表地址集合大得多。不同关键码的映射后必定会出现在同一个散列地址上,
2012-12-11 21:29:03 1212
原创 设计模式之建造者模式
一,建造者模式与抽象工程模式很相似,区别:抽象工厂模式侧重一系列的产品复杂的建造;而建造者模式侧重一步一步建造复杂的产品,最终返回产品。二,UML图解#include "stdafx.h"#include #include #includeusing namespace std;class Product{public: Product(
2012-12-09 20:09:34 623
原创 linux 进程间通信之管道和FIFO
一.管道1.可有多个进程向一个进程写入数据,读入数据的进程只能有一个2.管道通信只能支持单向通信,如果实现双向通信效果,则需要建立两个管道3.管道只支持有父子关系和有共同父进程关系的子进程之间的进程通信 int pipe(int filedes[2]);功能:filedes 为两个元素的整型数组,pipe 调用产生一个管道,管道的读描述符存入filedes[0],管道的写描
2012-12-08 23:06:18 811
原创 linux 进程通信之信号
一,进程之间通信方式有:信号,管道,FIFO(命名管道),信号量,消息队列,共享内存二,信号作用:1.信号是进程与进程之间或者进程与内核之间最小的通信单位2.信号以1-31之间的数标示3.进程运行的任何时刻都可能接受到其他进程或内核发给他的信号,并且使用信号处理函数处理该信号。处理完信号后,返回到进程,继续执行此刻信号的也即是一个软中断信号举例:int kill
2012-12-08 22:35:50 948
原创 linux TCP/IP网络编程(多进程)
多进程网络编程案例如下#include #include #include #include // may be use by getpid() and getppid()#include int main(int argc, char *argv[]) { int sockfd,new_fd, mypid; struct sockaddr_in
2012-12-08 21:21:45 1375
原创 linux下TCP/IP网络编程
1.服务器端代码:#include #include #include #include int main(int argc, char *argv[]) { int sockfd,new_fd; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int sin
2012-12-08 20:50:12 2816
转载 设计模式之原型模式
原型模式应用场景举例: GG和MM经常在QQ上聊天,但是GG打字的速度慢如蜗牛爬行,每次MM在瞬间完成恢复或者问候是,GG都会很紧张的去尽力快速打字,尽管如此,还是让MM有些不高心,MM说回复信息这么慢,显然是用心不专,不在乎她。哎,GG也是百口难辩啊,不过也确实是没有办法。有一天,GG想自己的密友K倾诉了自己的苦衷。K顿生大笑。说道:“傻瓜,你怎么不去网上收集一些肉麻的情话以及一些你们经
2012-12-08 16:40:36 684
原创 设计模式之抽象工程
抽象工厂模式解释: (此段模式分析有参考其他博文 因为已忘出去,故而没有标出链接地址)抽象工厂模式(Abstact Factory Pattern)是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。抽象工厂中方法对应产品结构,具体工厂对应产品族英文定义为:Provide an i
2012-12-08 16:14:20 685
原创 并查集与kruskal最小生成树
1、 概述并查集(Disjoint set或者Union-find set)是一种树型的数据结构,常用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。a.一个集合是一棵树,b.根节点下标代表集合名称,根节点的父为为负数,绝对值表示集合中的元素个数。并查集的重要知识点:a.加权规则,即并两个没有交集的集合,元素个数少的集合加到元素个数多的集合里
2012-12-05 21:46:53 863
原创 linux 下makefile的使用举例
该程序在linux平台下用C语言实现有两个头文件m1.h m2.h 对应的实现文件m1.c m2.c 调试文件test.c案例代码如下:m1.h#includevoid m1_print(char *str);m2.h#includevoid m2_print(char *str);m1.c#include#include"m1.h
2012-12-05 16:53:08 828
原创 最小生成树:kruskal算法与prim算法
Kruskal算法算法定义 克鲁斯卡尔算法 假设 WN=(V,{E}) 是一个含有 n 个顶点的连通网,则按照克鲁斯卡尔算法构造最小生成树的过程为:先构造一个只含 n 个顶点,而边集为空的子图,若将该子图中各个顶点看成是各棵树上的根结点,则它是一个含有 n 棵树的一个森林。之后,从网的边集 E 中选取一条权值最小的边,若该条边的两个顶点分属不同的树,则将其加入子图,也就是说,将
2012-12-05 13:49:44 1049
原创 lib与dll两种库
一.程序中有两种库:1.lib 静态链接库,在编译时加载,该文件包含函数所在的DLL文件以及函数所对应的地址等信息。 说白了lib里放的是dll中对应函数地址等信息的索引。2. dll 动态链接库,程序运行时加载,该文件包含函数的具体实现代码和数据。动态链接时,需要lib.以及dll共同协作 二. 使用lib需注意两个文件:(1).h头文件,包含 lib中说明输出的类
2012-12-01 15:54:19 725
原创 C++ STL 学习
一. C++ STL所提供的泛型数据结构用模板类实现,统称为容器,有:vector list queue set dequeue等等常用到的容器:1. vector a 是线性结构,与数组类似。 b 可以随机访问其中的元素,也可以从末端插入,与数组类似。 c 动态分配内存,使用时大小可以再
2012-12-01 15:24:10 619
深入java虚拟机
2013-01-05
EJB+jboss小组完整实验(网上书籍交易系统)
2012-12-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人