您好,登錄后才能下訂單哦!
這篇“怎么使用C語言嵌套鏈表實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“怎么使用C語言嵌套鏈表實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)”文章吧。
鏈表A,每個(gè)節(jié)點(diǎn)存放一個(gè)新的鏈表B1,B2,B3,B4,B5的頭結(jié)點(diǎn)。 場(chǎng)景: 一個(gè)年級(jí),相當(dāng)鏈表A 該年級(jí)5個(gè)班,每個(gè)班5個(gè)人,相當(dāng)于鏈表B1--B5 做一個(gè)學(xué)生成績(jī)管理系統(tǒng) 學(xué)生成績(jī)有語文 數(shù)學(xué) 英語 功能: 錄入成績(jī) 找三科總分的最高分 最低分 算出平均分
鏈表是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),結(jié)構(gòu)體指針在這里得到了充分的利用。
鏈表可以動(dòng)態(tài)的進(jìn)行存儲(chǔ)分配,也就是說,鏈表是一個(gè)功能極為強(qiáng)大的數(shù)組,他可以在節(jié)點(diǎn)中定義多種數(shù)據(jù)類型,還可以根據(jù)需要隨意增添,刪除,插入節(jié)點(diǎn)。
鏈表都有一個(gè)頭指針,一般以head來表示,存放的是一個(gè)地址。鏈表中的節(jié)點(diǎn)分為兩類,頭結(jié)點(diǎn)和一般節(jié)點(diǎn),頭結(jié)點(diǎn)是沒有數(shù)據(jù)域的。鏈表中每個(gè)節(jié)點(diǎn)都分為兩部分,一個(gè)數(shù)據(jù)域,一個(gè)是指針域。
說到這里你應(yīng)該就明白了,鏈表就如同車鏈子一樣,head指向第一個(gè)元素:第一個(gè)元素又指向第二個(gè)元素;……,直到最后一個(gè)元素,該元素不再指向其它元素,它稱為“表尾”,它的地址部分放一個(gè)“NULL”(表示“空地址”),鏈表到此結(jié)束。
作為有強(qiáng)大功能的鏈表,對(duì)他的操作當(dāng)然有許多,比如:鏈表的創(chuàng)建,修改,刪除,插入,輸出,排序,反序,清空鏈表的元素,求鏈表的長(zhǎng)度等等。
C語言嵌套鏈表實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng):熟悉鏈表的創(chuàng)建,結(jié)構(gòu)體指針的使用。
實(shí)現(xiàn)思路:創(chuàng)建學(xué)生鏈表->創(chuàng)建班級(jí)鏈表
其中
學(xué)生鏈表的結(jié)點(diǎn)的數(shù)據(jù)域存放學(xué)生的信息;
班級(jí)鏈表的結(jié)點(diǎn)的數(shù)據(jù)域?yàn)橹赶驅(qū)W生鏈表頭結(jié)點(diǎn)的指針;
利用這樣的嵌套鏈表實(shí)現(xiàn)多個(gè)班級(jí),以及每個(gè)班級(jí)多個(gè)學(xué)生的成績(jī)管理。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
1.包含頭文件
代碼如下(示例):
#include<stdio.h> #include<stdlib.h>
2.定義學(xué)生鏈表的結(jié)點(diǎn)
代碼如下(示例):
struct Student //聲明學(xué)生鏈表的節(jié)點(diǎn) { int chinese; int math; int english; int sum; struct Student* next; };
3.定義班級(jí)鏈表的結(jié)點(diǎn)
代碼如下(示例):
struct Class//聲明班級(jí)鏈表的節(jié)點(diǎn) { struct Student* student; struct Class* next; };
4.創(chuàng)建一個(gè)新的學(xué)生鏈表的結(jié)點(diǎn)并且通過尾插法插入鏈表中
代碼如下(示例):
struct Student* CreateStudentNode(struct Student*head,int num)//生成一個(gè)新的學(xué)生節(jié)點(diǎn)并且利用尾插法插入鏈表中 { struct Student* p=NULL; struct Student* node=(struct Student*)malloc(sizeof(struct Student));//為新節(jié)點(diǎn)開辟空間 //初始化新節(jié)點(diǎn) node->next=NULL; printf("輸入第%d個(gè)學(xué)生的信息:(語文 數(shù)學(xué) 英語)\n",num+1); scanf("%d %d %d",&node->chinese,&node->math,&node->english); node->sum=node->chinese+node->math+node->english; if(head->next==NULL){ //鏈表只有一個(gè)節(jié)點(diǎn)時(shí) head->next=node; return head; } else{ //鏈表有多個(gè)節(jié)點(diǎn)時(shí) 將指針p移到鏈表尾 p=head; while(p->next!=NULL){ p=p->next; } //將指針p移到鏈表尾 } p->next=node; return head; }
5.生成學(xué)生鏈表
代碼如下(示例):
struct Student* init_StudentLink()//生成學(xué)生鏈表 { int sum,i; struct Student* head=(struct Student*)malloc(sizeof(struct Student));//生成頭節(jié)點(diǎn) struct Student* p=NULL; scanf("%d",&sum);//學(xué)生數(shù) for(i=0;i<sum;i++){ p=CreateStudentNode(head,i); } return p; }
6.創(chuàng)建一個(gè)新的班級(jí)鏈表的結(jié)點(diǎn)并且通過尾插法插入鏈表中
代碼如下(示例):
struct Class* CreateClassNode(struct Class* head,int num)//生成一個(gè)新的班級(jí)節(jié)點(diǎn)并且利用尾插法插入鏈表中 { struct Class* p=NULL; struct Class* node=(struct Class*)malloc(sizeof(struct Class)); node->next=NULL; struct Student* q=NULL; printf("輸入第%d班級(jí)的人數(shù):\n",num+1); q=init_StudentLink(); node->student=q; if(head->next==NULL){ head->next=node; } else{ p=head; while(p->next!=NULL){ p=p->next; } } return 0; }
7.生成班級(jí)鏈表
代碼如下(示例):
void init_Class(struct Class* head)//生成班級(jí)鏈表 { int sum,i; printf("請(qǐng)輸入建立的班級(jí)數(shù)\n"); scanf("%d",&sum); for(i=0;i<sum;i++){ CreateClassNode(head,i); } }
8.打印結(jié)點(diǎn)信息
代碼如下(示例):
void printf_node(struct Class *head)//打印節(jié)點(diǎn)信息 { int max,min; struct Class *q=NULL; struct Student *p=NULL; q=head->next; min=max=q->student->next->sum; printf("*****************************************************************************************************\n"); printf("成績(jī)統(tǒng)計(jì)\t(語文\t數(shù)學(xué)\t英語\t總分\t平均分)\n"); printf("*****************************************************************************************************\n"); int i=0,j=0; p=q->student->next; while(q){ i++; for(p;p->next!=NULL;p=p->next){ j++; printf("第%d班第%d學(xué)生的成績(jī)\n",i,j); printf("語文:%d 數(shù)學(xué):%d 英語:%d 總分:%d 平均分:%lf\n",p->chinese,p->math,p->english,p->sum,(double)(p->sum)/3); if(p->sum>max){ max=p->sum; } if(p->sum<min){ min=p->sum; } } printf("\n"); q=q->next; j=0; } printf("總分最高為:%d\n",max); printf("總分最低為:%d\n",min); }
9,主函數(shù)
代碼如下(示例):
int main() { struct Class* head=(struct Class*)malloc(sizeof(struct Class)); head->next=NULL;//生成班級(jí)頭結(jié)點(diǎn) init_Class(head);//生成班級(jí)鏈表 printf_node(head);//打印信息 return 0; }
以上就是關(guān)于“怎么使用C語言嵌套鏈表實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。