原创 爲什麼堆排序可以降低複雜度

前言: 事情的本質往往需要追根溯源,從最宏觀去思考,會發現理解本質能事半功倍。舉個例子:8個小球中有一個質量較輕,用天枰最少稱幾次能區分開?這種題的本質其實是對答案的搜索空間如何切分的問題,如果你知道天枰有三種狀態,那最好的情況就是每次稱

原创 C語言中如何獲取系統時間?

1 使用time_t time( time_t * timer ) 精確到秒 函數名: time 頭文件:time.h 函數原型:time_t time(time_t * timer) 功能: 獲取當前的系統時間,返回的結果是一個time

原创 數據結構之鏈表(四)

1、雙向循環鏈表 實現雙向循環鏈表創建、插入、刪除、釋放內存等簡單操作 #include <stdio.h> #include <stdlib.h> typedef struct Node { int data; struct

原创 幾種常見排序算法及其特點

一、直接插入排序 直接插入排序(Insertion Sort)的基本思想是:每次將一個待排序的元素記錄,按其關鍵字大小插入到它前面已經排好序的子序列中的適當位置,直到全部元素插入完成爲止。 設需要排序的數組爲a[0…n-1]。 1. 初始

原创 走進數據結構---時間複雜度

一、時間複雜度介紹 1、時間複雜度定義 在進行算法分析,語句總得執行次數 T(n) 是關於問題規模 n 的函數,進而分析 T(n) 隨 n 的變化情況並確定 T(n) 數量級。算法的時間複雜度,也就是算法的時間量度,記作:T(n) = O

原创 數據結構與算法---棧與ADT

1、數據結構的基本概念 在計算機學科中數據結構表示數據在計算機中的存儲和組織形式。主要描述數據元素之間和位置關係等。一般來說,選擇適當的數據結構可以提高計算機程序的運行效率(時間複雜度)和存儲效率(空間複雜度)。 2、數據結構的三種層次

原创 C語言之指針數組

指針數組: 數組的所有元素都是指針類型數據(指針變量)。 定義形式: 類型名 *數組名[元素個數]; 例如:char *name[10]; 具體應用:一般用於處理一組字符串數據。 應用舉例: char *name[]={“Tom”,”M

原创 C語言之字符串與指針

1、字符串的存儲與訪問 字符串的訪問 char str[N]; 第i個字符的地址:str+i 第i個字符:*(str+i) 思考??? 以下寫法是否正確? char s1[N]; s1[]=“Welcome”; s1=“Welcome”

原创 fork && fork || fork問題

#include <unistd.h> #include <stdio.h> int main() { fork();/*****/ fork() && fork() |

原创 瞭解C語言之指針(三)

七、多級指針 1、二級指針 二級指針變量的定義形式爲:類型 **指針變量名; 普通變量、一級指針變量、二級指針變量也可以在一道定義。例如: int **q,*p,x; 指向指針的指針 用於存放某個指針變量地址的指針變量被稱爲指向指針的指

原创 數據結構之鏈表(一)

很多人,一接觸到數據結構就難懂,就說有難度,還有就說,鏈表有什麼用?今天我就詳細的說下,這個鏈表有什麼用。 一、鏈表介紹 1、鏈表有地址不連續的結點序列,必須通過指針相互連接。 2、鏈表的分類: (1)單向線性鏈表 每個節點中除了存儲數據

原创 瞭解C語言之指針(一)

一、指針的概念 什麼是變量? 內存中一塊命名的臨時區域 什麼是地址? 內存中每一個存儲單元有一個編號,稱爲地址。 char a; int b; float c; 通過變量名直接引用該內存空間。 直接訪問方式 什麼是指針? 在C語言中,指針

原创 瞭解C語言之指針(二)

四、指針變量的運算 指針變量可參與3種運算:賦值運算、算術運算和關係運算 賦值運算: float c, *p, *q; p=&c; q=p; int i ,*p; i=3; p=&i; *p++與*++p:引用下一元素的值 *p++çè*

原创 瞭解C語言之指針與數組

一、數組的存儲與訪問 小結: a[i]的地址是: &a[i] <=> a+i a[i]的內容是: a[i] <=> *(a+i) 二、指向一維數組的指針 需要定義一個基類型與數組元素數據類型相同的指針變量。 #include<std

原创 程序的靈魂----算法(二)

4、快速排序算法 (1)算法描述 從待排序序列中任意挑選一個元素,作爲基準 將所有小於基準的元素放在基準之前,大於基準的元素放在基準之後,等於基準的元素放在基準之前或之後,這個過程稱爲分組 以遞歸的方式,分別對基準之前和基準之後的分組繼續