C語言鍊錶實現簡單的學生資訊管理系統

2021-09-24 21:45:35 字數 3385 閱讀 9054

第一次寫部落格,今天學習了c語言鍊錶的相關知識,自己實現了乙個很簡單的學生成績管理系統,同時也溫習了一下多檔案程式設計,想和大家分享一下自己從中的一些經驗和感受。

標頭檔案

包含結構體的定義

#ifndef m //使用條件編譯來避免重複包含

#define m

struct student

;#endif

typedef struct student st;//簡化結構體的宣告

包含函式的定義

#define _crt_secure_no_warnings//關閉安全檢查

#include#include#include#include"list.h"

void add(st **head, char *name, double iscore);//增加學生的成績資訊

void del(st **head, char *name, double iscore);//刪除學生的成績資訊

void get(const st *head, char *name);//查詢學生的成績資訊

void change(st *head, char *name, double score, double sscore);//改變學生的成績資訊

void sort(const st *head);//對學生的成績進行排序

st *rev(st *head);//逆轉所有學生的成績資訊

void insert(st **head, char *name, double iscore);//插入學生的成績資訊

void print(const st *head);//列印學生的成績資訊

st *delall(st *head);//刪除所有學生的資訊

//各個函式的實現

#include"function.h"

//實現add函式

void add(st **head, char *name, double iscore)//增加學生的成績資訊

else//鍊錶為非空

st *pnew = (st *)malloc(sizeof(st));

strcpy(pnew->name, name);

pnew->score = iscore;

pnew->pnext = null;//最後乙個指標域為空

p->pnext = pnew;//將節點連線起來

}}

由於函式的副本機制,所以改變乙個指標的指向需要使用二級指標

#include"function.h"

//實現del函式

void del(st **head, char *name, double iscore)//刪除學生的成績資訊

else//刪除的不是首節點

p1 = p;

p = p->pnext;//下一次的迴圈

} }}

刪除鍊錶的乙個節點只需讓上乙個節點儲存該節點的指標域即可

#include"function.h"

//實現get函式

void get(const st *head, char *name)

p = p->pnext;

}}

#include"function.h"

//實現change函式

void change(st *head, char *name, double score, double sscore)

p = p->pnext;

}}

#include"function.h"

//實現sort函式

void sort(const st *head)

} }}

#include"function.h"

//實現rev函式

st * rev(st *head)//鍊錶的逆轉

st *p1 = head, *p2 = null, *p3 = null;

p2 = p1->pnext;//指向下乙個節點

while (p2)//p2為null時迴圈結束

head->pnext = null;//最後乙個指標域為null

head = p1;//指向頭節點

return head;//返回頭節點,由於函式有副本機制,因此只有通過返回值

//並且在main函式中賦值才能在不使用二級指標的情況下改變頭節點

}

鍊錶的逆轉就是讓每乙個節點依次儲存前乙個節點的位址,最後再讓頭指標指向之前的最後乙個節點即可。

#include"function.h"

//實現insert函式

static void inserth(st **head, char *name, double iscore)//在鍊錶的頭部插入

static void insertc(const st *head, st *phead, st *pback, char *name, double iscore)//在鍊錶的中間插入

void insert(st **head, char *name, double iscore)//實現節點的插入

else//在中間或者尾部插入

if (p->pnext == null)//尾部插入

else//中間插入

}}

鍊錶在插入之前需要先進行排序操作

#include"function.h"

//實現print函式

void print(const st *head)//輸出所有節點

}

#include"function.h"

//實現delall函式

st *delall(st *head)//刪除所有節點

free(head);//刪除第乙個節點

return null;//返回空指標

}

刪除整個鍊錶時,保持頭節點的位置不變,依次刪除下乙個節點,最後再刪除頭節點即可。

#include"function.h"

void main()

sort(head);

printf("\n\n學生的成績為:\n");

print(head);

system("pause");

}

最後是main函式中進行呼叫,由於已經直接包含了標頭檔案,所以此時沒必要再用extern進行外部函式宣告。

通過這個簡單的小專案,也進一步鞏固了自己對鍊錶的增刪查改,逆轉等操作的熟悉,同時也複習了函式副本以及二級指標的相關知識!

鍊錶實現簡單學生資訊管理

include include include define len sizeof struct stu typedef long long ll struct stu 建立學生資訊的結構體,包含學號,姓名 成績三個子項 struct stu creat 建立乙個鍊錶 if tail null 將尾...

C語言鍊錶實現簡單的學生成績錄入系統

如下 include include include include include define format d n s n f n f n f n define len sizeof stu typedef struct studentstu int n int tips 建立學生資訊 stu...

C語言鍊錶實現學生管理系統

include include include include include include using namespace std typedef struct ndoestudent struct student 建立學生資訊 student insert student head r nex...