原创 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;