原创 鏈表的反轉、單次訪問任意(倒數)節點

一、鏈表的反轉1.不申請輔助鏈表實現鏈表的反轉//反轉鏈表void re_list(list* head) {        //當節點個數小於2個時不需要反轉 if (num_node(head) <= 1) { return; }  

原创 程序段的概念

1.段的概念:段是程序的一部分,整個程序的所有組成部分分成一個一個段,並且給每個段起一個名字,然後在鏈接時就可以用這個名字來指示這些段,使得這些段排布在合適的位置。2.段的命名a.編譯器鏈接器內部段名,如:代碼段(.text)又叫文本段,

原创 排序算法—比較排序之冒泡排序及優化

一、冒泡排序通過比較兩個相鄰的元素來將小的數交換到前面,最後選出最小的數放在最前面;排序步驟就是比較相鄰元素並將較大的往後移。每掃描一輪,將確定一個元素的;冒泡排序的時間複雜度爲O(n^2);二、基本算法實現1.基本函數構建//構建隨機數

原创 結構體與內存對齊

三結構體1.結構體是一種自定義類型原生類型 自定義類型2.結構體使用時先定義結構體類型再定義變量或者同時定義struct student{};stru

原创 指針數組、數組指針、函數指針

一、基本概念1.指針數組:實質上是一個數組,數組中的元素是指針;2.數組指針:實質上是一個指針,指針指向的值爲數組;3.函數指針:實質上是一個指針,指針指向的值爲函數;二、表達式1.指針數組:如int *p[5]  p含義爲容量爲5的in

原创 ARM裸機——x210的啓動方式

x210的啓動方式一.基本概念1.內存SRAM靜態內存 特點:容量小 價格高 不需要軟件初始化 上電就可以使用DRAM動態內存 特點:容量大 價格低 不能上電就工作 需要軟件進行一定的初始化2.外存NorFlash 容量小 可以通過總線的

原创 malloc、free、new、delete

一、malloc和freemalloc是一個函數,函數原型爲:extern void*malloc(unsigned int num_bytes);分配長度爲num_bytes字節的內存塊。如果分配成功則返回指向被分配內存的指針,分配失敗

原创 堆、棧、段

一、堆大塊內存:堆內存的總容量很大,各個進程按需申請,使用完成後手動釋放;手動申請、釋放:malloc申請、free釋放;髒內存:堆內存是反覆使用,且不會清零;臨時性:只能在malloc和free之間訪問;使用方式:先申請綁定(使用mal

原创 排序算法—比較排序之選擇排序

選擇排序:思路 每次找到還未排序元素的最小值 放在特定的位置;每次循環都找出當前未排序的數中的最小值,將它放在特定的位置。每次循環僅交換一次//選擇排序//每次找到未排序元素的最小值 放在特定位置void selection_sort(i

原创 單向鏈表的基本實現

一、基本概念鏈表:是一種線性表,但是並不會按線性的順序存儲數據,而是在每一個節點裏存到下一個節點的指針(Pointer)。由於不必須按順序存儲,鏈表在插入的時候可以達到O(1)的複雜度,比另一種線性表順序錶快得多,但是查找一個節點或者訪問

原创 ARM邏輯——點亮LED

一.LED的工作特性及原理圖D26爲電源指示燈其他LED正極接到vdd3.3v 負極接到4個io口要點亮LED要將負極所接到額IO口爲低電平發現gpio(通用輸入輸出)口之後需要去找到控制響應IO的寄存器GPIO就是芯片的引腳 作爲GPI

原创 volatile

volatile 告訴編譯器定義的變量是隨時可能發生變化的,每次使用它的時候必須從變量的地址中讀取,因而編譯器生成的可執行碼會重新從i的地址讀取數據放在k中。  而優化做法是,由於編譯器發現兩次從i讀數據的代碼之間的代碼沒有對i進行過操作

原创 雙向鏈表

雙向鏈表對於單向鏈表在節點結構中多了一個前向指針,指向前一個節點。C語言實現://節點typedef struct double_list { double_list* next; double_list* bef; int data;}

原创 C語言中的字符串

1.C語言沒有原生的字符串類型a.高級語言中有字符串類型,如string;b.C語言中使用指針來管理字符串;如:char* p=“linux”,此時p叫做字符串,但是實際上p只是一個字符指針,p指向了字符串的首地址;2.C語言中字符串的本

原创 共用體(聯合體)、枚舉

一、共用體(union)也可稱爲聯合體,共用體類型的定義、元素的定義和元素的使用方法與結構體相似,但是共用體的成員是一體的公用一塊內存 同一個內存有多種解析方法。二、枚舉定義了一些符號 符號的本質是int類型的常量 每個符號和常量綁定枚舉