C語(yǔ)言嵌套鏈表實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
C語(yǔ)言嵌套鏈表實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng),供大家參考,具體內(nèi)容如下
鏈表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ī)有語(yǔ)文 數(shù)學(xué) 英語(yǔ) 功能: 錄入成績(jī) 找三科總分的最高分 最低分 算出平均分
前言
鏈表是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),結(jié)構(gòu)體指針在這里得到了充分的利用。
鏈表可以動(dòng)態(tài)的進(jìn)行存儲(chǔ)分配,也就是說(shuō),鏈表是一個(gè)功能極為強(qiáng)大的數(shù)組,他可以在節(jié)點(diǎn)中定義多種數(shù)據(jù)類型,還可以根據(jù)需要隨意增添,刪除,插入節(jié)點(diǎn)。
鏈表都有一個(gè)頭指針,一般以head來(lái)表示,存放的是一個(gè)地址。鏈表中的節(jié)點(diǎn)分為兩類,頭結(jié)點(diǎn)和一般節(jié)點(diǎn),頭結(jié)點(diǎn)是沒(méi)有數(shù)據(jù)域的。鏈表中每個(gè)節(jié)點(diǎn)都分為兩部分,一個(gè)數(shù)據(jù)域,一個(gè)是指針域。
說(shuō)到這里你應(yīng)該就明白了,鏈表就如同車鏈子一樣,head指向第一個(gè)元素:第一個(gè)元素又指向第二個(gè)元素;……,直到最后一個(gè)元素,該元素不再指向其它元素,它稱為“表尾”,它的地址部分放一個(gè)“NULL”(表示“空地址”),鏈表到此結(jié)束。
作為有強(qiáng)大功能的鏈表,對(duì)他的操作當(dāng)然有許多,比如:鏈表的創(chuàng)建,修改,刪除,插入,輸出,排序,反序,清空鏈表的元素,求鏈表的長(zhǎng)度等等。
C語(yǔ)言嵌套鏈表實(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)容,下面案例可供參考
一、代碼實(shí)現(xiàn)
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)并且通過(guò)尾插法插入鏈表中
代碼如下(示例):
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é)生的信息:(語(yǔ)文 數(shù)學(xué) 英語(yǔ))\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)并且通過(guò)尾插法插入鏈表中
代碼如下(示例):
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(語(yǔ)文\t數(shù)學(xué)\t英語(yǔ)\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("語(yǔ)文:%d 數(shù)學(xué):%d ?英語(yǔ):%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;
}以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C語(yǔ)言編寫學(xué)生成績(jī)管理系統(tǒng)
- 學(xué)生成績(jī)管理系統(tǒng)C語(yǔ)言代碼實(shí)現(xiàn)
- C語(yǔ)言利用結(jié)構(gòu)體數(shù)組實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
- C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)源代碼
- C語(yǔ)言實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)實(shí)戰(zhàn)教學(xué)
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單學(xué)生成績(jī)管理系統(tǒng)
- C語(yǔ)言結(jié)構(gòu)體版學(xué)生成績(jī)管理系統(tǒng)
- 使用C語(yǔ)言實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
- C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
相關(guān)文章
websocket++簡(jiǎn)單使用及實(shí)例分析
下面小編就為大家?guī)?lái)一篇websocket++簡(jiǎn)單使用及實(shí)例分析。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05
C++中線性代數(shù)計(jì)算Eigen庫(kù)的使用教程詳解
Eigen是一個(gè)基于線性代數(shù)的C++模板庫(kù),主要用于矩陣、向量、數(shù)值求解和相關(guān)算法,本文主要為大家簡(jiǎn)單聊聊Eigen庫(kù)的使用,希望對(duì)大家有所幫助2023-12-12
整型數(shù)據(jù)在內(nèi)存中存儲(chǔ)方式的講解
今天小編就為大家分享一篇關(guān)于整型數(shù)據(jù)在內(nèi)存中存儲(chǔ)方式的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02
C語(yǔ)言 scanf輸入多個(gè)數(shù)字只能以逗號(hào)分隔的操作
這篇文章主要介紹了C語(yǔ)言 scanf輸入多個(gè)數(shù)字只能以逗號(hào)分隔的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
詳解C語(yǔ)言常用的一些轉(zhuǎn)換工具函數(shù)
這篇文章主要介紹了C語(yǔ)言常用的一些轉(zhuǎn)換工具函數(shù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
C語(yǔ)言每日練習(xí)之進(jìn)制轉(zhuǎn)換
這篇文章主要介紹了C語(yǔ)言進(jìn)制轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-11-11
VS2019安裝cbd調(diào)試器的實(shí)現(xiàn)步驟
本文主要介紹了VS2019安裝cbd調(diào)試器的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12
C++?兩個(gè)類通過(guò)智能指針進(jìn)行訪問(wèn)操作代碼
在C++中,有多種方法可以實(shí)現(xiàn)將一個(gè)函數(shù)傳遞給另一個(gè)類,并在該類中調(diào)用該函數(shù),您可以選擇將函數(shù)作為回調(diào)函數(shù)或通過(guò)類的成員函數(shù)來(lái)實(shí)現(xiàn),這篇文章主要介紹了C++?兩個(gè)類通過(guò)智能指針進(jìn)行訪問(wèn)操作,需要的朋友可以參考下2023-08-08
從匯編看c++函數(shù)的默認(rèn)參數(shù)的使用說(shuō)明
本篇文章介紹了,在c++中函數(shù)的默認(rèn)參數(shù)的使用說(shuō)明分析。需要的朋友參考下2013-05-05

