結構體與鍊錶預習

2021-08-21 20:38:55 字數 1662 閱讀 6016

一、結構體的宣告;

我們把又一定聯絡的變數放在一起定義,這就是結構體,如下

struct student

int num;

char name[20];

float score;

}stu;

struct student a,b,c;

scanf("%d%s%f",&stu.num,stu.name,&stu.score);

以上宣告中,struct為structre的簡寫,是宣告結構體型別時必不可少的,後面的student是乙個結構體名,struct student合起來是乙個結構體型別,大括號內為內定義,定義的變數其實與普通變數並無區別,可單獨進行使用,而想使用這些變數,就必須用到大括號外的stu,stu是結構體變數,我們可以用「stu.score」這樣的語句來引用其中的變數。

在這裡,結構體名student與結構體變數stu可以自己取名字。stu也未必非要加在大括號後,也可另外宣告結構體變數如下明定義了3個為a,b,c,與stu同樣都僅僅是乙個指向結構體型別的變數而已。

當然,我們還可以定義乙個結構體陣列,即可以把「stu」改為「stu[20]」,這便是乙個結構體陣列,其中又20個元素,意思不難理解,就是相當於你同時定義了20個同樣的結構體陣列而已。

那麼好了,我們是不是也可以來定義乙個結構體型別的指標呢?當然。在上面的宣告之下,我們還可以定義乙個指標如下:

struct student *p;

p = &stu;

scanf("%d%s%d",&(*p).num,(*p).name,&(*p).score);

上述賦值方式每個「.」前面的()是不能少的,因為在所有的運算子中,「.」的優先順序是最高的,但我們這裡必須先運算*p,故括號不能丟,當然,我們其實還有一種更為常見的賦值方式如下:

scanf("%d%s%d",p->num,p->name,p->score);

這樣就能避免丟括號的問題了。

二、靜態鍊錶

鍊錶其實是一種重要的資料結構。它是動態進行分配儲存的一種結構。

鍊錶有乙個頭指標變數,我們一般用head來表示,而後就是結點,每乙個結點都有兩部分組成,一部分存放實際資料,即存放使用者所需要的資料,另乙個部分則存放下乙個結點實際資料的位址,一般我們把鍊錶建立在結構體變數中,如下:

struct student 

int num;

float score;

struct student *next;

}a[3];

在結構體中定義了乙個指向該結構體型別的指標,那我們該如何使用呢?

首先,在使用前,我們得先定義乙個該結構體型別的指標指向此結構體的首位址如「struct student *p = a;」,其次,我們還得把結構體變數的尾位址「a[2].next」指向空位址「null」,這樣我們才能結束它。如下**段:

#include struct student

;int main()

head = &a[0];

a[0].next = &a[1];

a[1].next = &a[2];

a[2].next = null;

p = head;

printf("學生資訊為:\n");

while(p != null)

return 0;

}

這就是靜態鍊錶的使用方法。 

結束結構體與簡單鍊錶

1620 7 唐大智 2016年12月6日 連續第六十六天總結 內容 a 1 在定義結構體型別時,成員不能初始化,也不能指定除了static以外的儲存型別。2 結構體型別可以含自身型別的指標成員,但不能含自身型別的普通成員。3 型別定義 型別定義的本質是對乙個已存在的型別重新命名,並不是定義新的資料...

2018 2 2 鍊錶預習

1.頭指標和頭結點的異同 頭指標 頭指標是指鍊錶指向第乙個結點的指標,若煉表有頭結點,則是指向頭結點的指標 頭指標具有標示作用,所以常以頭指標冠以鍊錶的名字 無論鍊錶是否為空,頭指標均不為空。頭指標是鍊錶的必要元素。頭結點 頭結點是為了操作的統一和方便而設立的,放在第一元素的結點之前,其資料域一般無...

結構體鍊錶小結

引用自身的結構體,乙個結構體中有乙個或多個成員的基型別就是本結構體型別時,說明這個結構體可以引用自己,所以稱作引用自身的結構體。例如下面的結構體 struct link a p是乙個可以指向struct link型別變數的指標成員,這樣,a.p a就是合法的表示式。那麼,這有什麼意義呢?這樣的意義就...