日記2


1、c語言 ,sleep(10);  的頭文件   #include <unistd.h>

2、c所有的庫函數源代碼都位於glibc中,只需要下載glibc包,然后解壓即可,具體下載網址:http://ftp.gnu.org/gnu/libc/可以下載一個c函數速查chm,隨時查閱庫函數的用法,或者查閱MSDN

3、數據在內存中的存放順序 (變量的地址,最低地址的那個字節

(1)一個整數類型內部,低地址存儲低位,高地址存儲高位。

(2)若干個局部變量(在棧中存儲的),先定義的高地址,后定義的低地址

(3)類、結構體或數組的元素,先定義的低地址,后定義的高地址

4、memcpy函數源代碼:

 1 void *memcpy(void *dst, const void *src, size_t len)
 2 {
 3     if(NULL == dst || NULL == src){
 4         return NULL;
 5     }
 6     
 7     void *ret = dst;
 8     
 9     if(dst <= src || (char *)dst >= (char *)src + len){
10         //沒有內存重疊,從低地址開始復制
11         while(len--){
12             *(char *)dst = *(char *)src;
13             dst = (char *)dst + 1;
14             src = (char *)src + 1;
15         }
16     }else{
17         //有內存重疊,從高地址開始復制
18         src = (char *)src + len - 1;
19         dst = (char *)dst + len - 1;
20         while(len--){
21             *(char *)dst = *(char *)src;
22             dst = (char *)dst - 1;
23             src = (char *)src - 1;
24         }
25     }
26     return ret;
27 }

5、位段結構體

位段成員必須聲明為int,signed int或unsigned int,在成員名的后面是一個冒號和一個整數,這個整數指定該位段所占用的位的個數。

存儲方式為:第二個位段無法放在第一個位段剩余的位上時,編譯器會把第二個位段放在內存的下一個字節上,在VC 中位段存儲單元的大小是4字節。位段不能跨平台使用。

struct packed {
    unsigned one:1;   //占一位
    unsigned two:2;   //占二位
    unsigned three:3; //占三位
    unsigned four:4;   //占四位
} data;

6、結構體的內存對齊

 1 #include <iostream>
 2 using namespace std;
 3 
 4 #pragma pack(1)//
 5 struct S1
 6 {
 7     char C1;
 8     int i;
 9     char C2;
10 };
11  
12 int main()
13 {    
14     cout<<sizeof(struct S1)<<endl;  //6(12)
15     return 0;
16 }

7、某些編譯器為空指針使用不存在的內存地址。

8、

9、

10、二級指針傳參創建鏈表

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3  
 4 typedef struct node
 5 {
 6     int date;
 7     struct node *next;
 8 }node;
 9  
10 void Creatlink(struct node ** tp,int k);
11 int main()
12 {
13     int tmp;
14     struct node *head =NULL,*tail =NULL;
15     head=(struct node *)malloc(sizeof(node));
16     scanf("%d",&(head->date));
17     tail=head;
18     while(~scanf("%d",&tmp) && tmp){
19         Creatlink(&tail,tmp);
20     }
21     tail->next=NULL;
22     for(tail=head;tail;tail=tail->next)
23     printf("%d ",tail->date);
24     return 0;
25  } 
26  
27  void Creatlink(struct node ** tp,int k)
28  {
29      (*tp)->next=(struct node *)malloc(sizeof(node));
30      (*tp)->next->date=k;
31     (*tp)=(*tp)->next; 
32  }
View Code

11、c++ 返回對象引用與返回對象 https://blog.csdn.net/lws123253/article/details/80382401

12、若派生類執行無參構造函數,則其基類必須定義有無參構造函數才能正常執 ,這個說法是錯的,如果基類有默認的構造函數,是不需要定義的。

13、C++ 調用虛函數操作的只能是對象指針或對象引用,否則仍為靜態聯編;

14、在宏定義#define PI 3.14159中,用宏名PI代替一個字符串

15、關系運算符<= 與 == 的優先級不相同

16、在C程序中,可以將整型數以二進制形式存放到文件中的函數是fwrite()
17、fread(buffer,size,count,fp);其中的buffer代表的是一個指針,指向要存放讀入數據的地址

18、http://forspeed.onlinedown.net/down/126disk.com_csf.rar

19、C結構體內不允許有靜態變量,可以用全局變量代替

20、把Microsoft Visual Studio 10.0\VC\bin   下的cvtres.exe 重命名,解決vc2010鏈接錯誤(電腦中的版本高)

21、C++在new時的初始化的規律可能為:對於有構造函數的類,不論有沒有括號,都用構造函數進行初始化;如果沒有構造函數,則不加括號的new只分配內存空間,不進行內存的初始化,而加了括號的new會在分配內存的同時初始化為0。

22、給定有n個結點的向量,建立一個有序單鏈表的時間復雜度 O(n^2)
23、在一個單鏈表HL中,若要向表頭插入一個由指針p指向的結點,則執行p->next = HL;  HL = p;
24、將兩個各有n個元素的有序表歸並成一個有序表,在最壞的情況下,其比較次數是  2n-1
25、對順序存儲的線性表,設其長度為n,在任何位置上插入或刪除操作都是等概率的。插入一個元素平均要移動表中的 n/2 個元素。

26、在一個長度為n的線性表中順序查找值為x的元素時,查找時的平均查找長度(即x同元素的平均比較次數,假定查找每個元素的概率都相等)為(n+)/2

27、dumpbin.exe   D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin

28、LIB和DLL的區別與使用   https://www.cnblogs.com/zkwarrior/p/10948174.html    

29、單鏈表,刪除指針指向的結點,通過復制后繼結點的數據的方式,實現刪除:設指針變量p指向單鏈表中結點A,若刪除單鏈表中結點A,則需要修改指針的操作序列為:q=p->next;p->data=q->data;p->next=q->next;free(q);

30、m行n列的矩陣,非零項個數為t, t  / (m*n)  <= 0.3 的矩陣為稀疏矩陣。

31、三種特殊矩陣:上三角,下三角矩陣,帶狀矩陣(采取順序存儲);稀疏矩陣(采取三元組順序存儲,十字鏈表鏈式存儲,都不可隨機訪問)。

32、下三角矩陣存儲元素地址計算公式 :loc(i,j) = loc(1,1)  +   ( i*(i-1)/2 + j -1 )*size  (等差數列)

33、上三角矩陣存儲元素地址計算公式 :loc(i,j) = loc(1,1)  +   ( (i-1)*(2*n-i+2)/2 + j -i )*size,(等差數列)n為矩陣列數

34、帶狀矩陣存儲元素地址計算公式:loc(i,j) = loc(1,1)  +   ( 2+3*(i-2) + j -i+1)*size,

35、十字鏈表定義(行鏈表,列鏈表組成)

//十字鏈表結點定義
typedef struct OLNode
{
    int row,col; //行,列
    ElemType value;
    struct OLNode *right, *down;//行列指針
}OLNode, *OLink;
//十字鏈表定義
typedef struct
{
    OLink *row_head, *col_head; //行列鏈表頭指針數組
    int m, n; //m行,n列
}CrossList;

36、具有n片葉子的完全二叉樹共有2

37、通過先序遍歷可以刪除二叉樹中所有的葉子結點

38、完全二叉樹,可由其先序序列唯一確定,完全二叉樹,可由其中序序列唯一確定,滿二叉樹,可由其后序序列唯一確定
39、含3個結點的普通樹的樹形共有2

40、假定一棵三叉樹的結點數為50,則它的最小高度為5: 結點數相同而高度最小的三叉樹是滿三叉樹或完全三叉樹(深度為h的三叉樹,若前面h-1層是滿的,只有第h層從右邊連續缺若干個結點的三叉樹稱為完全三叉樹)。根據完全二叉樹的性質4 (即具有n個結點的完全二叉樹,其深度h=[log2n]+1),可推得三叉樹的相應性質,即具有n個結點的完全三叉樹,其深度h = [log3n]+1。故具有50個結點的三叉樹,其最小高度為[log350]+1=5。

41、在哈夫曼樹中,若編碼長度只允許小於等於4,則除了已確定兩個字符的編碼為0和10外,還可以最多對  4 個字符進行編碼。1100 1101 1110 1111

42、判斷:一棵二叉樹中,中序遍歷序列的最后一個結點,必定是該二叉樹前序遍歷的最后一個結點。(錯,右子樹有左子樹不一樣)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM