这次将前几天发的顺序表改为单链表实现,总体上也很简单,只是增加了指针域,代码奉上:

#include <stdio.h>
#include<malloc.h>
#include <string.h>
typedef struct {int no;char name[8];float score;
}Student;//定义一个学生基本信息的结构,取名为Student
typedef struct Node{Student data;//使用Student 类型定义数据域struct Node *next;//使用自身结构定义指针域//int listsize;
}LinkNode;//将整个结构定义为LinkNode//定义链表构造函数
void CreatList(LinkNode *&L,Student a[],int n){LinkNode *s,*r;L=(LinkNode *)malloc(sizeof(LinkNode));r=L;for(int i=0;i<n;i++){s=(LinkNode *)malloc(sizeof(LinkNode));s->data=a[i];r->next=s;r=s;}r->next=NULL;}
//定义长度函数
int ListLength(LinkNode *L){int n=0;LinkNode *p=L;while(p->next!=NULL){n++;p=p->next;}printf("该链表长度为%d",n);return 0;
} int length(LinkNode *L){int n=0;LinkNode *p=L;while(p->next!=NULL){n++;p=p->next;}return n;
} //定义输出函数
void DisList(LinkNode *L){LinkNode *p=L->next;int n=0;LinkNode *q=L;while(q->next!=NULL){n++;q=q->next;} printf("**************计科一班学生信息**************\n");printf("序号\t学号\t姓名\t\t\t成绩\n");int i=1;float avescore=0;while(p!=NULL){printf("%d\t%d\t%-8s\t\t%.2f\n",i,p->data.no,p->data.name,p->data.score);//printf("成绩为%f\n",p->data.score);avescore +=p->data.score;p=p->next;i++;}printf("平均分为%.2f\n",avescore/n);//printf("\n");}
//定义插入函数1,测试用的,赖得删了
int insretlist(LinkNode *&L,int i,Student e){int j=0;LinkNode *p=L,*s;if(i<=0) return false;while(j<i-1&&p!=NULL){j++;p=p->next;}if(p==NULL)return false; else {s=(LinkNode *)malloc(sizeof(LinkNode));s->data=e;s->next=p->next;p->next=s;return true;}}
//定义插入函数int  insertstu(LinkNode *L){LinkNode *p=L,*s;int j=0, i=0,n=0;LinkNode *q=L;while(q->next!=NULL){n++;q=q->next;}printf("请输入插入的位置:");scanf("%d",&i);while(j<i-1 && p!=NULL){p=p->next;j++;}if(p==NULL) return false;else {s=(LinkNode *)malloc(sizeof(LinkNode));int no;char name[8];float score;printf("请输入该同学的学号(1-4位)\n");scanf("%d",&no);while(no<1||no>9999){printf("不符合学号规定长度,请重新输入!\n");scanf("%d",&no);}s->data.no=no;printf("请输入该同学的姓名\n");scanf("%s",&name); while(strlen(name)<4||strlen(name)>8) {printf("不符合规定姓名长度,请重新输入!\n");scanf("%s",&name); }strcpy(s->data.name,name); printf("请输入该同学的成绩\n");scanf("%f",&score);int count = 1;float m=score;while(m>9){m=m/10;count ++;}while(count>2||count<1){printf("不符合规定长度,请重新输入!\n");count=1;scanf("%f",&score);m=score;while(m>9){m=m/10;count ++;}}s->data.score=score;s->next=p->next;p->next=s;printf("插入完成!\n");DisList(L); } }// bool Dellist(LinkNode *&L,int i,Student &e){
//  int j=0;
//  LinkNode *p=L,*q;
//  if(i<=0)return false;
//  while(j<i-1 && p!=NULL){
//      j++;p=p->next;
//
//   }
//  if(p==NULL)
//      return  false;
//
//      else {
//          q=p->next;
//          if(q==NULL)
//              return false;
//           e=q->data;
//           p->next=q->next;
//           free(q);
//           return true;
//       }
//
//
// }
//定义删除函数int delstu(LinkNode *L){LinkNode *p=L,*q;int j, i;printf("请输入要删除同学的序号:\n");scanf("%d",&i);if(i<1||i>length(L)){printf("该同学不存在,请重新输入!\n");scanf("%d",&i);}else {printf("该学生存在");}while(j<i-1 && p!=NULL){j++;p=p->next;}q=p->next;p->next=q->next;free(q);printf("删除成功!\n");DisList(L); return 0;
}//定义修改函数,内置修改int update(LinkNode *L,Student g,Student h){//int i=1;LinkNode *p=L->next;int n=0;LinkNode *q=L;while(q->next!=NULL){n++;q=q->next;}for(int i=0;i<n;i++){if(p!=NULL && (p->data.no==g.no||p->data.name==g.name||p->data.score==g.score)){p->data.no=h.no,strcpy(p->data.name,h.name),p->data.score=h.score;//3printf("找到了,在第%d位",i+1);}else {p=p->next;}}
//   if(p==NULL){
//      printf("p为空");
//   return 0;}
//   else {
//   // printf("第%d次找到\n",i);
//   printf("找到了");
//      p->data.no=h.no,strcpy(p->data.name,h.name),p->data.score=h.score;
//      printf("找到了g,i为%d",i);// }return 0;}//定义修改函数int updatestu(LinkNode *&L){LinkNode *p=L->next;int no;printf("请输入要修改的学生序号\n");scanf("%d",&no);while(no<1||no>length(L)){printf("该同学不存在,请重新输入!\n");scanf("%d",&no);} int j=0,no1;while(j<no){p=p->next;j++;}if(p!=NULL){printf("已找到该学生\n");printf("将该学生学号%d修改为:\n",p->data.no);scanf("%d",&no1);while(no1<1||no1>9999){printf("不符合学号规定长度,请重新输入!\n");scanf("%d",&no1);}p->data.no=no1;}char name[8];printf("将姓名%s修改为:\n",p->data.name);scanf("%s",&name);while(strlen(name)<4||strlen(name)>8) {printf("不符合规定姓名长度(2-8个字符),请重新输入!\n");scanf("%s",&name); }strcpy(p->data.name,name); printf("将该同学成绩%.2f修改为:\n",p->data.score);float score;scanf("%f",&score);//p->data.score=score;int count = 1;float m=score;while(m>9){m=m/10;count ++;}while(count>2||count<1){printf("不符合规定长度(满分100),请重新输入!\n");count=1;scanf("%f",&score);m=score;while(m>9){m=m/10;count ++;}}p->data.score=score;}
//定义菜单
int menu(){printf(" \n按回车键进入菜单........\n");int c;getchar(); printf("请输入想要操作的代码数字:\n");printf("****************MENU******************\n");printf("       1.插入学生信息\n");printf("       2.删除学生信息\n");printf("       3.修改学生信息\n");printf("       4.查看学生信息表\n"); printf("       5.查看学生表长度\n"); printf("       6.退出\n");      scanf("%d",&c);while(!(c>=1 && c<=6)){printf("请输入数字1-6!\n"); scanf("%d",&c);if(c>=1 && c<=6)break;}return c;} //定义主函数,进行单链表的初始化,预先插入三条数据,展示学生信息
int main(){LinkNode *L;Student data[100];Student g,h;g.no=1;strcpy(g.name,"六万群");g.score=99;h.no=5;strcpy(h.name,"周小其");h.score=95; data[0].no=1;data[1].no=2;
strcpy(data[0].name,"六万群");
strcpy(data[1].name,"八万群");
data[0].score=99;data[1].score=88;Student e,f;e.no=3,strcpy(e.name,"九万群"),e.score=56;
CreatList(L,data,2);
insretlist(L,3,e);//插入e,就按群
//Dellist(L,2,f);//删除第二条八万群
update(L,g,h);//找到g改为h
DisList(L);
for(;;){switch(menu()){case 1:{insertstu(L);break;};case 2:{delstu(L);break;}case 3:{updatestu(L);break;}case 4:{DisList(L);break;}case 5:{ListLength(L);break;}case 6:{exit(0);}}}return 0;
}

学生信息管理单链表实现(c语言)相关推荐

  1. 一个完整的c语言的单链表代码,单链表完整C语言纯代码.docx

    单链表完整C语言纯代码单链表完整C语言纯代码 带头结点的单链表 PAGE \* MERGEFORMAT 4 单链表 带头结点 #include #include /* 带头结点的单链表的操作 在该链表 ...

  2. 循环单链表及C语言实现

    本博文介绍循环单链表及其C语言的实现 目录 循环单链表 循环单链表的操作 插入 头结点插入 尾结点插入 指定位置插入 删除 头结点删除 尾结点删除 指定位置删除 遍历 查找 循环单链表的C语言实现 循 ...

  3. 数据结构上机-尾、头插法建立单链表-单链表遍历C语言完整代码实现

    点击此处跳转视频链接:数据结构上机-尾.头插法建立单链表-单链表遍历C语言完整代码实现

  4. 成绩管理单链表文件c语言,c语言学生信息管理完整.docx

    学生信息管理系统 本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉 C 语言的文件和单链表的各种基本操作.本程序中涉及结构体.单链表.文件等方面的知 识.通过本程序的训练,使学 ...

  5. c语言单链表功能,[数据结构]单链表(C语言)的各种功能

    06-03阅读200,000 + 链表是一种常见的基本数据结构,在此充分利用了结构指针. 链表可以动态存储和分配,即链表是一个功能非常强大的数组. 他可以在节点中定义多种数据类型,并可以根据需要随意添 ...

  6. 数据结构-带头节点的单链表(C语言)超详细讲解

    前面我们学到线性表的顺序存储结构(顺序表),发现它有着明显的缺点:插入和删除元素时需要频繁的移动元素,运算效率低.必须按事先估计的最大元素个数申请连续的存储空间.存储空间估计大了,造成浪费空间:估计小 ...

  7. 数据结构-单链表基本操作-C语言代码

    单链表基本操作 1.头插法建立单链表 2.尾插法建立单链表 3.查找结点 3.修改结点 4.插入结点 5.删除结点 本篇只有c语言代码,具体思路讲解请看这篇博客:数据结构-线性结构-单链表 1.头插法 ...

  8. 字符串的冒泡排序c语言,c语言单链表冒泡排序_c语言字符串排序冒泡法_c语言链表排序...

    1. #include 2. 3. struct Node; 4. 5. typedef struct Node *PtrToNode; 6. typedef PtrToNode List; 7. t ...

  9. 单链表(c语言实现)贼详细

    直接上代码吧 #include<stdio.h> #include<malloc.h> /* 单链表特点: 它是一种动态的储存结构,链表中每个节点占用的储存空间不是预先分配的, ...

最新文章

  1. 《概率机器人》速度运动模型gmapping中代码解析
  2. Docker的私有镜像仓库搭建
  3. ecmobile实现支付宝支付和百度云推送遇到的问题及解决方案(android)
  4. 现代php 阅读笔记,PHP 手册阅读笔记 - 语言参考篇
  5. 充分利用UC berkeleys数据科学专业
  6. Redis 支持的数据类型
  7. 应用squid全面加速web(全)
  8. 我同事今天被裁了,但我却涨了1万工资!
  9. Linux 性能监测
  10. STC89C52是51单片机吗?
  11. Java集合框架类图
  12. jupyter 教程
  13. LAMP让开放源代码软件更安全 PHP是例外
  14. go get报错 i/o timeout的解决办法
  15. 2020年408真题_2020年港澳台联考真题——数学!
  16. 怎么将做个文件做成二维码?扫描二维码展示文件怎么做?
  17. 数学基础 - 线性空间(Vector Space)
  18. 论文阅读《Direct Sparse Odometry》2
  19. [ISUX转译] 网页设计创新式布局与交互
  20. js获取根目录的方法

热门文章

  1. 使用Java播放MP3或Wav音频
  2. cinder连接mysql数据库_cinder的手工搭建
  3. Windows 10家庭版系统用户名修改中文名为英文名
  4. Flex:无缝安装AIR运行时在公司内网(防火墙)报下载失败的问题。
  5. JavaWeb入门-JQuery
  6. 爬虫第一式:了解使用爬虫
  7. [FFMPEG硬件加速]nvidia方案
  8. 连点器一秒10000下?连点器的用途
  9. 百度快速收录,百度新网站快速收录服务是什么site首页收录
  10. 继马化腾之后,马云也罕见套现430亿元,黄峥更是“送”出了1000亿