似水流年

夜半灯青书香暖,一唳鹤鸣起寒烟
个人信息
  • 今日访问: 1
  • 总访问量:4185
  • 开博时间:2012-07-28
  • 博客排名:暂无排名
博文分类
日志存档
博客成员
博客门铃
博文

冒泡排序以及冒泡排序的优化

冒泡排序法第一次排序会把最大的冒到最上面,第二次会把次大的泡冒到最大的后面,一次类推····,另外在排序的次数上会逐渐减少。看代码:

void bubble_sort(int *a,int n)

{

    for(int i=0;i

        for(int j = 1;j

        {

            if(a[j-1]>

分类:数据结构 | 评论:0 | 浏览:22 | 收藏 | 查看全文>>

int a[5],a+1与&a+1

#include

int main(void)

{

 

     int a[5] = {1, 2, 3, 4, 5};

     int *ptr1 = (int*)(&a + 1); //这里偏移量是整个数组的大小

      int *ptr2 = (int*)((int)a + 1); //a地址再加一个字节,直接数值相加而不是指针

      int *ptr3 =&n

分类:C/C++ | 评论:0 | 浏览:5 | 收藏 | 查看全文>>

死锁产生的原因及四个必要条件

产生死锁的原因主要是:

(1) 因为系统资源不足。

(2) 进程运行推进的顺序不合适。

(3) 资源分配不当等。

如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则

就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。

产生死锁的四个必要条件:

(1) 互斥条件:一个资源每次只能被一个进程使用。

(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。

(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之

一不满足,就不会发生死锁。

死锁的解除与预防:

分类:linux | 评论:0 | 浏览:133 | 收藏 | 查看全文>>

const与#define宏定义的区别

const定义的只读变量在程序运行过程中只有一份拷贝(因为它是全局的只读变量,存放在静态区),而#define定义的宏常量在内存中有若干个拷贝。

 

#define宏是在预编译阶段进行替换,而const修饰的只读变量是在编译的时候确定其值。

 

#define宏没有类型,而const修饰的只读变量具有特定的类型

 

===========================================

const int *p;   //p可变,p指向的对象不可变

int const*p;  //p可变,p指向的对象不可变

int *const p;  //p不可变,p指向的对象可变

const int *const p;  

分类:C/C++ | 评论:0 | 浏览:5 | 收藏 | 查看全文>>

栈和队列

1、设计含min函数的栈,要求minpushpop的时间复杂度都是o(1)

 

 #define MAX (100)

typedef struct

{

 int data;

 int min;

}Stack_Data;

typedef struct

分类:数据结构 | 评论:0 | 浏览:6 | 收藏 | 查看全文>>

单向链表操作

1、在单向链表中如何快速查到倒数第n个节点?

操作方法和步骤:

(1)定义2个指针p1,p2。

(2)使用循环让p1指向顺数第n个节点,同时p2指向第头结点;

(3)然后,p1和p2同时移动,直到p1指向NULL,此时p2应该指向倒数第n个节点。

 

typedef struct list

{

    int key;

    struct list *next;

};

list *find(list *head,int n)

{

     list *p1,*p2;

     p1=head;

     p2=NULL;//可能没有n个   

  &

分类:数据结构 | 评论:0 | 浏览:16 | 收藏 | 查看全文>>

编译时多态和运行时多态

。。。

分类:待完成 | 评论:0 | 浏览:0 | 收藏 | 查看全文>>

为什么要设计出反码补码?

正数的原码反码补码是一样的:

 

[+2] = [00000010]原 =[00000010]反 =[00000010]补

 

但是对于负数来说,它的原码反码补码就不尽相同:

 

[-2] =[10000010]原 =[11111101]反 =[11111110]补

 

对于人来说,可以直接看出原码和十进制数字的关系,而反码和补码还需要其他一些转换,那么为什么设计出反码补码?

 

因为计算机只有加法,没有减法,因为在做减法的时候,可以认为是加上一个负数,这样可以减少计算机电路复杂度。

所以在用原码进行减法的时候会出问题。比如:我要计算1-1,因为计算机没有减法只有加法,所以计算机自动换成1+(-1)

 

 1 - 1&

分类:C/C++ | 评论:0 | 浏览:15 | 收藏 | 查看全文>>

GetMemory函数的几种经典考法

解析1:

====================================================================

情形1:

void GetMemory( char *p )

{

 p = (char *) malloc( 100 );

}

 

void Test( void )

{

 char *str = NULL;

 GetMemory( str );

 strcpy( str, "hello world" );

&n

分类:C/C++ | 评论:0 | 浏览:22 | 收藏 | 查看全文>>

进程间、线程间通信方式小结

一、进程间的通信方式

# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

# 有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

# 信号量(semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

# 消息队列( messagequeue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

# 信号&n

分类:linux | 评论:0 | 浏览:4 | 收藏 | 查看全文>>
共6页/54条记录 首页 上一页 1 2 3 4 5 下一页 尾页 返回顶部
最新评论
最近访客
友情博客
关注更新
你关注的用户没有更新博文!
友情链接