資料結構 線性表

2021-09-20 00:24:11 字數 1688 閱讀 8907

1.為什麼可以直接用結構體變數直接定義新變數?

**展示(順序表的型別定義):

#define maxlen 100 //定義常量maxlen為100表示儲存空間總量

typedef int datatype ; //定義datatype為int型別

typedef struct //順序表儲存型別

seqlist;

seqlist l;//定義乙個順序表l

為什麼直接用seqlist定義了新的變數?

實質上是:

定義結構體變數的時候,struct一般來說不可以省略。(在c++中可以,但在c中不行。)

但是在c中要稍微改變下也行:

typedef struct student

student;

(struct)sutdent m;

上面經過typedef定義後 就可以省略struct定義結構體變數了,即是用結構體變數定義了新變數。

型別定義符 typedef c語言不僅提供了豐富的資料型別 , 而且還允許由使用者自己定義型別說明符 , 也就是說 允許由使用者為資料型別取「別名」 。

1.型別定義符 typedef 即可用來完成此功能(為資料型別取別名)。

例如,有整 型量a,b, 其說明如下: int a,b; 其中int 是整型變數的型別說明符。 int 的完整寫法為 integer ,為了增加程式的可讀性, 可把整型說明符用 typedef 定義為: typedef int integer 這以後就可用 integer 來代替 int 作整型變數的型別說明了。 例如: integer a,b; 它等效於: int a,b;

2. 用typedef 定義陣列 、 指標 、 結構等型別將帶來很大的方便, 不僅使程式****書寫簡單而且使意義更為明確,因而增強了可讀性

例如: typedef char name[20]; 表示 name 是字元陣列型別,陣列長度為 20 。然後可 用name 說明變數,如: name a1,a2,s1,s2;

完全等效於:

char a1[20],a2[20],s1[20],s2[20];

又如:typedef struct stu

stu;

定義stu 表示 stu 的結構型別,然後可用 stu 來說明結構變數:

stu body1,body2;

typedef 定義的一般形式為: typedef 原型別名 新型別名

其中原型別名中含有定義部分,新型別名一般用大寫表示,以便於區別。 有時也可用巨集定義來代替 typedef 的功能,但是巨集定義是由預處理完成的, 而typedef則是在編譯時完成的,後者更為靈活方便。

3.在1中所示**裡, data[maxlen]為靜態分配,若更改為:*data ,則為動態分配。

4.&符號的區別:

(1)取位址含義。例如,scanf函式中輸入變數前的&僅表示取輸入變數位址的含義。

(2)引用。&在函式變數前為引用的含義。

值得強調的是:引用和指標在值傳遞上有很大的區別

資料結構(線性表)

1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...

資料結構 線性表

參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...

資料結構 線性表

線性表是最基礎的一種資料結構,這樣的資料物件包含的資料元素具有一對一的前驅後繼關係。按其邏輯儲存方式的不同可分為兩類線性表 順序表和鏈式表。其中鏈式表又可分為線性鍊錶 迴圈鍊錶和雙向鍊錶。下面分別介紹下這幾種線性表的資料結構 1.順序表 typedef struct sqlist 插入演算法 i到n...