typedef--資料結構--複雜度分析
阿新 • • 發佈:2018-12-12
資料結構:
1.資料的4種邏輯結構: 集合 線性結構 樹形結構 圖
2.資料儲存: 邏輯關係 和 物理關係
順序表: 邏輯相連,實體地址也相連
連結串列: 邏輯相連,實體地址不一定相連
3.線性表包括: 順序表 連結串列
區分一下陣列和順序表: 陣列主要關注資料的存取; 順序表可實現存,取,插,刪,改等
typedef:
#include<stdio.h> typedef int Int; typedef int *pint; int main() { int a = 10; Int b = 20; printf("%d,%d\n", a, b); int x = 100; int *p1 = &x; pint p2 = &x; printf("%d,%d\n", p1, p2); return 0; }
上述程式碼請個位讀者執行並觀察結果,可以得到這樣的結論:
typedef int Int; 的含義就是將 int 重新命名為 Int, 因此printf("%d,%d\n", a, b);的結果為兩個整數;
typedef int *pint; 的含義就是將 int *(指標型別) 重新命名為 pint ,即用pint 宣告一個變數和 int* 宣告一個型別等價;
關於typedef有一個好記的方法(僅供參考,如果有更好的辦法可以交流):
比如: int Int; 意思是定義一個整形的Int 變數,加上 typedef 後就將 Int 提升為int 這種資料型別
那麼 typedef int *pint; 就是將pint 提升為int * 這種資料型別
請理解下列程式碼:
typedef struct student
{
int name[20];
int age;
}student; //定義一個結構體並且重新命名為student
//定義一個 struct student 變數
struct student stu1;
//定義一個 struct student 變數
student stu2;
//定義一個 struct student 型別的指標變數
student *stu3;
在很多資料結構書中我們可以看到下列型別的結構體:
typedef struct student { int name[20]; int age; }student,*pstudent; student *stu1; pstudent stu2; /* * 其實就是將pstudent升級為student *這種指標型別 * 所以下面的 stu1 和 stu2是同類型的指標變數 */