1樓:匿名使用者
第十一章 結構體
11.1 概述
在實際應用中,有不少應用問題如果只採用已學的變數和陣列作為資料結構顯得很不方便。
例:輸入100個學生的學號、姓名和考試成績,編寫程式找出高分者和低分者。
用變數和陣列作資料結構可編寫程式如下:
main()
if(scorestmax.score) stmax=st;
if(st.scorenum=1001;
(*p).score=85; 或 p->score=85;
strcpy((*p).name,」wang」);
或 strcpy(p->name,」wang」);
②整體引用
st1=*p; 等效於 st1=st;
■指向結構體陣列的指標
struct student a[100];
struct student *p;
p=a;
通過指標變數引用結構體陣列元素:
①成員引用
(*p).num=1001; 或 p->num=1001;
(*p).score=85; 或 p->score=85;
strcpy((*p).name,」wang」);
或strcpy(p->name,」wang」);
一般地:
(*(p+i)).num=1001; 或 (p+i)->num=1001;
(*(p+i)).score=85; 或 (p+i)->score=85;
strcpy((*(p+i)).name,」wang」);
或 strcpy((p+i)->name,」wang」);
也可以用下標法:
p[i].num=1001;
②整體引用
*(p+1)=*(p+0); 或 p[1]=p[0];
■用結構體變數和指向結構體的指標作函式引數
用結構體變數作函式引數時,對應的實參應該是同型別的結構體變數(或陣列元素),引數傳遞是「值傳遞」。
用指向結構體的指標作函式引數時,對應的實參應該是同型別的結構體變數的地址(或陣列的地址),引數傳遞是「地址傳遞」。
main()
;f(st);
printf(「\n %5d%10s%5d」,
st.num,st.name,st.score);
}f(struct student a)
main()
;f(&st);
printf(「\n %5d%10s%5d」,st.num,st.name,st.score);
}f(struct student *a)
通過指標變數a可以訪問它所指向的結構體。
11.7 用指標處理連結串列
■連結串列概述
連結串列是一種重要的資料結構─動態資料結構。
以具體例子來說明連結串列的概念及其應用:
例:選擇合適的資料結構來存放一批學生的學號及考試成績,以便進一步處理。
由於學生人數未知,用靜態資料結構不合適。
用連結串列處理較恰當。
用連結串列處理該問題的基本思路:
將各學生的資料進行離散存放,來一個學生就分配一小塊記憶體(結點)。並將各結點用指標依次連線起來─連結串列。
每結點應包含下一結點的開始地址。
最後一個結點中的指標為空。
鏈頭指標指向第一個結點,是訪問連結串列的重要依據。
這樣的連結串列稱單向連結串列。
一個結點可用如下結構體描述:
typedef struct student
stu;
typedef : 自定義型別符(見11.10)
■單向連結串列的建立
①輸入一個學生的資料。
②分配結點空間,資料存入。
③將該結點的首地址賦給上一結點的next,若該結點是第一個結點,則賦給頭指標。
④將該結點的next置為空,表示該結點為當前的最後結點。
stu *creat()
return head;
}■單向連結串列的訪問
以輸出為例
①通過頭指標找到第一個結點.
②輸出當前結點的內容,並通過next找到後繼結點,┄┄,直到next為空.
void output(stu *head)
}■刪除結點操作
①按連結串列的訪問方法找到相應結點。
②若該結點是第一個結點,則將後繼結點指標賦給頭指標。
若該結點是最後一個結點,則將字首結點的next置為空。
若該結點是中間結點,則將後繼結點指標賦給字首結點的next。
③釋放該結點所佔的記憶體單元。
stu *delete(stu *head,int number)
else
} return head;
} ■插入操作
假定將結點p 插入到結點p0的後面, 則插入操作的關鍵為:
p->next=p0->next; p0->next=p;
2樓:匿名使用者
結構體就是可以自己定義一個資料的型別
請問本人會j**a,誰能給我以j**a的形式講一講c語言中的struct結構 100
誰能簡單明瞭 地告訴 我c語言中 結構體的用法 什麼意思?
3樓:建昆綸殳順
結構體就是一個可以包含不同資料型別的一個結構,它是一種可以自己定義的資料型別
比如人類是一個型別
但是c中沒有人類這個型別
你可以自定義個型別
人類擁有名字,年齡,身高
#include
"stdio.h"
#include
"conio.h"
typedef
struct
people
people;
main()
上面的例子定義了一個新的型別
people
包含有名字,年齡,身高
3個資料
main
中定義了一個人類例項a
並對他的3個屬性進行賦值
最後列印出a的3個屬性
誰能告訴我 c語言結構體變數和結構體成員到底有什麼關係 謝謝
4樓:物理公司的
結構體名字是型別名,變數名是實體名,一個型別可以有許多實體。
具體操作,舉例講解如下:
1.結構體型別定義
定義方式1:
typedef struct lnode *linklist;
定義方式2:
struct lnode ;
typedef struct lnode *linklist;
以上兩個定義方式是等價的,是將*linklist定義為struct lnode型別,即linklist被定義為一個型別名。這樣就可以用linklist來定義說明新的變數了,如:
linklist l;
即將l定義為struct lnode型別的指標變數2.結構體型別變數定義
定義方式1:
struct lnode lnodea;
定義方式2:
struct lnode ;
struct lnode lnodea;
以上兩個定義方式也是等價的,這樣就將lnodea定義為一個truct lnode型別的變數,即lnodea為一個truct lnode型別的變數名。
5樓:盈藍
結構體型別是資料型別,而結構體變數是資料物件。
但成員本身不是變數,她必須以結構體變數相連線,以便使用它的成員
c語言中結構體的作用到底是幹什麼的,能通俗點講嗎
6樓:
把有關係的變數放在一起,檢視起來方便
7樓:匿名使用者
【結構體作用】
結構體和其他型別基礎資料型別一樣,例如int型別,char型別 只不過結構體可以做成你想要的資料型別。以方便日後的使用。
在實際專案中,結構體是大量存在的。研發人員常使用結構體來封裝一些屬性來組成新的型別。
結構體在函式中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關心這個是什麼,只要根據定義使用就可以了。
結構體可以定義一些複雜資料型別,比如我要定義一個員工資訊的結構體,就可以在結構體裡新增員工編號、姓名、工資、地址、出生日期、**等資訊,有了結構體給程式設計帶來很大的方便。
誰能給我講講關於Backstreet boy的,越詳細越好
成員 kevin howie d brian a.j nick 五個才華洋溢的少年,不僅舞跳得好 長相俊美 更重要的是他們個個是充滿 天分的奇才。1994年初成軍時仍只是初生之犢不畏虎的小毛頭,一年之後,他們已躍登世界舞臺,成為眾所矚目的新偶像,他們就是 新好男孩 新好男孩 的五個成員中,kevin...
誰能給我講講天山技能怎麼用
天山的技能是要看場地的,一般野外,我是不用技能的。就是用的話,也只是兩個普通的單擊技能。而副本中,我呢一般是用的兩個普通的單擊,接著移花接木,陽關,鷹擊,最後暗器的什麼全上。至於你說的殺星副本,天山在裡面的效率的確不怎麼樣,不過,我玩的時候我是不動的,我得跟隊友說,我用強寶寶打的。天山的如果要進的話...
誰能給我幾部好看的日本動漫片啊,誰能給我推薦幾部好看的日本動漫片啊
火影忍者 柯南海賊王 電影 秒速五釐米 雲之彼端,約定的地方 長篇 1.網球王子 我最喜歡的運動漫畫 貌似也是看的最全的一部 所有的動畫片我都看了倆遍 這是多麼偉大的工程啊,尤其是我當時還沒personal computer。現在也仍在追新網王的漫畫 2.死神 畫風到現在越來越華麗 喜歡 人氣超高的...