原创 SIGCHLD 信號

SIGCHID:子進程在終止時會給父進程發SIGCHLD信號,該信號的默認處理動作是忽略,父進程可以自定義SIGCHLD信號的處理函數,這樣父進程只需專心處理自己的工作,不必關心子進程了,子進程終止時會通知父進程,父進程在信號處理函數中調用

原创 sig_atomic_t類型與volatile限定符

sig_atomic_t類型與volatile限定符volatile:防止編譯器優化代碼:  1 #include<stdio.h>   2 #include<signal.h>   3 int a=0;   4 void signal_h

原创 select實現I/O複用

select:系統提供select函數來實現多路複用輸入/輸出模型。select系統調用是用來讓我們的程序監視多個文件句柄的狀態變化的。程序會停在select這裏等待,直到被監視的文件句柄有一個或多個發生了狀態改變。關於文件句柄,其實就是一

原创 在O(1)時間刪除鏈表節點

思路:時間複雜度要求爲O(1),已知要刪除的節點,可以找到該節點的下一個節點,把下一個節點的相關信息複製到要刪除的節點上,刪除下一個節點,可以達到題目要求。注意:刪除尾節點時需要遍歷一遍,刪除頭結點時,需要把頭結點移到下一個節點。#incl

原创 可重入函數與線程安全

線程安全函數  概念:        線程安全的概念比較直觀。一般說來,一個函數被稱爲線程安全的,當且僅當被多個併發線程反覆調用時,它會一直產生正確的結果。 線程安全指的是多線程併發執行時,能夠得到正確的結果,這裏強調的是併發性,確保線程安

原创 回調函數與函數指針

一、函數指針:(1)函數指針是指向函數的指針變量。也就是說,它是一個指針變量,而且該指針指向一個函數。對於指針變量來說,它的值是它指向的變量的地址。舉個例子:指針變量pi是指向一個整型變量i的指針,則變量i的地址 &i 就是指針變量pi的值

原创 鏈表的反轉

從頭開始摘節點,依次連起來。#include<stdio.h> #include<stdlib.h> #include<assert.h>   struct Listnode {     int _value;     Listnode* 

原创 斐波那契數列的第n項。

第一種:遞歸函數  1 #include<stdio.h>   2 #include<stdlib.h>   3 #include<assert.h>   4    5 int Fabonacci(int n)   6 {   7     

原创 調整數組順序使奇數位於偶數前面

第一種:開闢一個一樣大小的數組,遍歷原數組的數據,把原數組奇數依次存放在新數組的前面,偶數存放在後面。時間複雜度:O(n^2);空間複雜度:O(n)缺陷:效率太差#include<stdio.h> #include<stdlib.h> vo

原创 數值的整數次方

數值的整數次方注意:0的0次方是沒有意義的;0的負數負數次方也是無意義的;注意base與0值的比較;exponent爲負數時,先轉化成正數再求倒數。(1)這種方法比較直觀。while()循環。#include<stdio.h> #inclu

原创 打印1到最大的n位數。

輸入數字n,按順序打印出從1最大的n位十進制數。(1)直接通過n定位到最大的數大一的數,然後打印出來。缺陷:有可能數值超出計算機存儲數據基本類型的範圍,所以就得采用第二種方法。  1 #include<stdio.h>   2 #inclu

原创 棧的壓入、彈出序列

題目:輸入兩個整數序列,第一個序列表示棧的壓入順序,判斷第二個序列是否是棧的彈出序列。思路:#include<iostream> #include<stdlib.h> #include<stack> using namespace std;