/*用C語言鏈表編寫壹個學生信息系統程序,需要輸出學生的學號、姓名、性別、學號、姓名和成績(添加、刪除、查詢、排序和平均)*/
# include & ltstdio.h & gt
# include & ltiostream & gt
# include & ltstring.h & gt
# include & ltstdlib.h & gt
使用命名空間std
const int n = 5;
/*
* nodeEntry:節點數據類型
* nodeADT:節點結構
* linkADT:鏈表結構
*/
typedef結構學生
{
int num
char name【30】;
迷人的性愛;
float score 1;//語言
浮動分數2;//數學
浮動分數3;//英語
//struct Student * next;
}學生;
typedef結構鏈接CDT {
nodeADT頭;
} * linkADT
/*
* InitLink:初始化鏈表
* CreateNode:創建節點
* AppendLink:添加數據
*/
nodeADT CreateNode(學生條目){
nodeADT p =(nodeADT)malloc(sizeof * p);
p-》;entry=entry,p-& gt;next = 0;
return p;
}
/*
排序鏈接:排序鏈表
//按學號排序
void sort linkid(link ADT link ){
nodeADT pHead、pRear、p、TP;
如果(!鏈接)返回;
for(pHead = link-& gt;head,pRear = 0;pHeadpHead = pHead-& gt;下壹個){
for(TP = pHead,p = pHead-& gt;接下來;p;tp=p,p = p-》;下壹個)?
if(pHead-& gt;entry.num & gt= p-》;條目號)
TP-& gt;next = p-& gt;接下來,p-》;next=pHead,pHead=p,p = tp
如果(!pRear)鏈接-》;head = pHead
else pRear-& gt;next = pHead
pRear = pHead
}
//按英語成績排序
void sort link English(link ADT link ){
nodeADT pHead、pRear、p、TP;
如果(!鏈接)返回;
for(pHead = link-& gt;head,pRear = 0;pHeadpHead = pHead-& gt;下壹個){
for(TP = pHead,p = pHead-& gt;接下來;p;tp=p,p = p-》;下壹個)?
if(pHead-& gt;entry.score3 & gt= p-》;條目。分數3)
TP-& gt;next = p-& gt;接下來,p-》;next=pHead,pHead=p,p = tp
如果(!pRear)鏈接-》;head = pHead
else pRear-& gt;next = pHead
pRear = pHead
}
}
//按姓名的字典順序排序
void sort link name(link ADT link ){
nodeADT pHead、pRear、p、TP;
如果(!鏈接)返回;
for(pHead = link-& gt;head,pRear = 0;pHeadpHead = pHead-& gt;下壹個){
for(TP = pHead,p = pHead-& gt;接下來;p;tp=p,p = p-》;下壹個)?
if(pHead-& gt;entry . name【0】& gt;= p-》;entry . name【0】)
TP-& gt;next = p-& gt;接下來,p-》;next=pHead,pHead=p,p = tp
如果(!pRear)鏈接-》;head = pHead
else pRear-& gt;next = pHead
pRear = pHead
}
}
//按名稱長度排序
void sort linkname length(link ADT link ){
nodeADT pHead、pRear、p、TP;
如果(!鏈接)返回;
for(pHead = link-& gt;head,pRear = 0;pHeadpHead = pHead-& gt;下壹個){
for(TP = pHead,p = pHead-& gt;接下來;p;tp=p,p = p-》;下壹個)?
if(strlen(pHead-& gt;entry . name)& gt;= strlen(p-& gt;entry.name))
TP-& gt;next = p-& gt;接下來,p-》;next=pHead,pHead=p,p = tp
如果(!pRear)鏈接-》;head = pHead
else pRear-& gt;next = pHead
pRear = pHead
}
循環鏈表與單鏈表相同。
是鏈式存儲結構,不同的是循環表最後壹個節點的指針指向循環表的第壹個節點或頭節點,從而形成循環鏈。
循環鏈表的操作與單鏈表基本相同。區別如下:
1.建立循環鏈表時,最後壹個節點的指針必須指向header節點,而不是像單個鏈表那樣設置為NULL。這種情況也用於在最後壹個節點後插入新節點。
2.在判斷是否到達表的末尾時,是判斷節點的鏈域的值是否是頭節點。當鏈域值等於頭指針時,意味著已經到達表的末尾。而不是像單鏈表壹樣判斷鏈域值是否為空。
百度百科-鏈表