日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

学生信息链表,建立,插入,删除,遍历,查找,修改,最大(小)值,平均...

發(fā)布時(shí)間:2024/7/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学生信息链表,建立,插入,删除,遍历,查找,修改,最大(小)值,平均... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

/【例11-10】建立一個(gè)學(xué)生成績(jī)信息(包括學(xué)號(hào)、姓名、成績(jī))的單向鏈表,學(xué)生數(shù)據(jù)按學(xué)號(hào)由小到大順序排列,要求實(shí)現(xiàn)對(duì)成績(jī)信息的插入、修改、刪除和遍歷操作。/

/* 用鏈表實(shí)現(xiàn)學(xué)生成績(jī)信息的管理 */

include<stdio.h>

include<stdlib.h>

include<string.h>

struct stud_node{
int num;
char name[20];
int score;
struct stud_node next;
};
struct stud_node Create_Stu_Doc(); /* 新建鏈表 /
struct stud_node InsertDoc(struct stud_node * head, struct stud_node stud); / 插入 /
struct stud_node DeleteDoc(struct stud_node * head, int num); /* 刪除 /
void Print_Stu_Doc(struct stud_node head); /* 遍歷 */

struct stud_node * Find(struct stud_node * head, int num); /查找/
struct stud_node * Modify(struct stud_node * head, int num, int score); /修改成績(jī)/
struct stud_node * Max(struct stud_node * head); /求最高分?jǐn)?shù)的學(xué)生記錄/
struct stud_node * Min(struct stud_node * head); /求最低分?jǐn)?shù)的學(xué)生記錄/
double Ave(struct stud_node * head); /求平均分/
void Save(struct stud_node * head);
struct stud_node *Read();

typedef struct stud_node *LNode;
LNode head,p;

int main(void)
{
struct stud_node head=NULL, p;
int choice, num, score;
char name[20];
int size = sizeof(struct stud_node);

do{
printf("1:Create 2:Insert 3:Delete 4:Print 5:Modify 6:Find 7:Max 8:Save 9:Read 10:Min 0:Exit\n");
scanf("%d", &choice);
switch(choice){
case 1:
head = Create_Stu_Doc();
break;
case 2:
printf("Input num,name and score:\n");
scanf("%d%s%d", &num,name, &score);
p = (struct stud_node *) malloc(size);
p->num = num;
strcpy(p->name, name);
p->score = score;
head = InsertDoc(head, p);
break;
case 3:
printf("Input num:\n");
scanf("%d", &num);
head = DeleteDoc(head, num);
break;
case 4:
Print_Stu_Doc(head);
break;
case 5:
printf("Input num:\n");
scanf("%d", &num);
printf("Input score:\n");
scanf("%d", &score);
head=Modify(head,num,score);
break;
case 6:
printf("Input num:\n");
scanf("%d", &num);
p=Find(head,num);
if(p!=NULL)
printf("%d\t%s\t%d \n", p->num, p->name, p->score);
else
printf("Not Found %d\n",num);
break;
case 7:
p=Max(head);
if(p!=NULL)
printf("%d\t%s\t%d \n", p->num, p->name, p->score);
else
printf("Not Found\n");
break;
case 8:
Save(head);
break;
case 9:
head=Read();
break;
case 10:
p=Min(head);
if(p!=NULL)
printf("%d\t%s\t%d \n", p->num, p->name, p->score);
else
printf("Not Found\n");
break;
case 0:
break;
}
}while(choice != 0);

return 0;
}

/新建鏈表/
struct stud_node * Create_Stu_Doc()
{
struct stud_node * head,*p;
int num,score;
char name[20];
int size = sizeof(struct stud_node);

head = NULL; printf("Input num,name and score:\n"); scanf("%d%s%d", &num,name, &score); while(num != 0){ /* 學(xué)號(hào)0表示輸入結(jié)束,且學(xué)號(hào)0對(duì)應(yīng)的姓名和成績(jī)都要輸入 */ p = (struct stud_node *) malloc(size);p->num = num;strcpy(p->name, name);p->score = score;head = InsertDoc(head, p); /* 調(diào)用插入函數(shù) */scanf("%d%s%d", &num, name, &score);

}
return head;
}

/* 插入操作 /
struct stud_node InsertDoc(struct stud_node * head, struct stud_node stud)
{
struct stud_node ptr ,ptr1, ptr2;

ptr2 = head; ptr = stud; /* ptr指向待插入的新的學(xué)生記錄結(jié)點(diǎn) */if(head == NULL){ /* 原鏈表為空時(shí)的插入 */ head = ptr; /* 新插入結(jié)點(diǎn)成為頭結(jié)點(diǎn) */head->next = NULL; } else{ /* 原鏈表不為空時(shí)的插入 */while((ptr->num > ptr2->num) && (ptr2->next != NULL)){ptr1 = ptr2; /* ptr1, ptr2各后移一個(gè)結(jié)點(diǎn) */ptr2 = ptr2->next;}if(ptr->num <= ptr2->num){ if(head == ptr2) head = ptr;/* 新插入結(jié)點(diǎn)成為頭結(jié)點(diǎn) */else ptr1->next = ptr; /* 在ptr1與ptr2之間插入新結(jié)點(diǎn) */ptr->next = ptr2;}else{ /* 新插入結(jié)點(diǎn)成為尾結(jié)點(diǎn) */ptr2->next = ptr;ptr->next = NULL; } } return head;

}

/* 刪除操作 /
struct stud_node DeleteDoc(struct stud_node * head, int num)
{
struct stud_node ptr1, ptr2;

if(head == NULL) /*鏈表空 */return NULL; else if(head->num == num){/* 要被刪除結(jié)點(diǎn)為表頭結(jié)點(diǎn) */while(head != NULL && head->num == num){ ptr2 = head;head = head->next;free(ptr2);} } else{/* 要被刪除結(jié)點(diǎn)為非表頭結(jié)點(diǎn) */ptr1 = head;ptr2 = head->next; /*從表頭的下一個(gè)結(jié)點(diǎn)搜索所有符合刪除要求的結(jié)點(diǎn) */while(ptr2 != NULL){if(ptr2->num == num){ /* ptr2所指結(jié)點(diǎn)符合刪除要求 */ptr1->next = ptr2->next;free(ptr2); }else ptr1 = ptr2; /* ptr1后移一個(gè)結(jié)點(diǎn) */ptr2 = ptr1->next; /* ptr2指向ptr1的后一個(gè)結(jié)點(diǎn) */} }return head;

}

/遍歷操作/
void Print_Stu_Doc(struct stud_node * head)
{
struct stud_node * ptr;

if(head == NULL){printf("\nNo Records\n");return; } printf("\nThe Students' Records Are: \n"); printf("Num\tName\tScore\n"); for(ptr = head; ptr != NULL; ptr = ptr->next)printf("%d\t%s\t%d \n", ptr->num, ptr->name, ptr->score);

}

struct stud_node * Find(struct stud_node * head, int num) /查找/
{
struct stud_node *ptr;

if(head==NULL)return NULL; else {for(ptr=head;ptr!=NULL;ptr=ptr->next)/*for循環(huán)從head開(kāi)始到NULL循環(huán)*/ if(ptr->num==num)break;return ptr; }

}

struct stud_node * Modify(struct stud_node * head, int num, int score)/修改通過(guò)查找學(xué)號(hào)修改成績(jī)/
{
struct stud_node *ptr;

if(head==NULL)return NULL; else {for(ptr=head;ptr!=NULL;ptr=ptr->next)if(ptr->num==num){ptr->score=score;break;}return head; }

}

struct stud_node * Max(struct stud_node * head)
{
struct stud_node maxp,ptr;

if(head==NULL)return NULL; else {maxp=head;for(ptr=head->next;ptr!=NULL;ptr=ptr->next)if(maxp->score<ptr->score)maxp=ptr;return maxp; }

}
struct stud_node * Min(struct stud_node * head)
{
struct stud_node minp,ptr;

if(head==NULL)return NULL; else {minp=head;for(ptr=head->next;ptr!=NULL;ptr=ptr->next)if(minp->score>ptr->score)minp=ptr;return minp; }

}

void Save(struct stud_node * head)
{
FILE fp;
if((fp=fopen("data.txt","w")) == NULL){ /打開(kāi)文件(套用)*/
printf("File open error!\n");
exit(0);
}

struct stud_node * ptr;if(head == NULL){return; }for(ptr = head; ptr->next != NULL; ptr = ptr->next)fprintf(fp,"%d %s %d\n", ptr->num, ptr->name, ptr->score); fprintf(fp,"%d %s %d", ptr->num, ptr->name, ptr->score);/*輸出的最后沒(méi)有換行*/if( fclose(fp) ){/*關(guān)閉文件(套用)*/printf( "Can not close the file!\n" );exit(0); }

}

struct stud_node Read()
{
FILE fp;
if((fp=fopen("data.txt","r")) == NULL){
printf("File open error!\n");
exit(0);
}

struct stud_node * head,*tail,*p; //int num,score; //char name[20]; int size = sizeof(struct stud_node);head = tail=NULL;while(!feof(fp)){ /* 讀到結(jié)束標(biāo)志結(jié)束 */ p = (struct stud_node *) malloc(size);fscanf(fp,"%d%s%d", &p->num, p->name, &p->score);//head = InsertDoc(head, p); /* 調(diào)用插入函數(shù) */p->next = NULL;if(head == NULL) head = p;else tail->next = p;tail = p;

}

if( fclose(fp) ){printf( "Can not close the file!\n" );exit(0); }return head;

}

轉(zhuǎn)載于:https://www.cnblogs.com/1112zx/p/10549694.html

總結(jié)

以上是生活随笔為你收集整理的学生信息链表,建立,插入,删除,遍历,查找,修改,最大(小)值,平均...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。