实验目的 :

1 、掌握线性表的定义;

2 、掌握线性表的基本操作,如建立、查找、插入和删除等。

实验内容:

定义一个包含学生信息(学号,姓名,成绩)的的 顺序表和链表,使其具有如下功能:

(1) 根据指定学生个数,逐个输入学生信息;

(2) 逐个显示学生表中所有学生的相关信息;

(3) 根据姓名进行查找,返回此学生的学号和成绩;

(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);

(5) 给定一个学生信息,插入到表中指定的位置;

(6) 删除指定位置的学生记录;

(7) 统计表中学生个数。

参考信息 :

Definition of structure student :

typedef struct {

char no[8];   //8 位学号

char name[20]; // 姓名

int price;     // 成绩

}Student;

Definition of sequential list:

typedef  struct {

Student  *elem;     // 指向数据元素的基地址

int  length;       // 线性表的当前长度

}SqList ;

Definition of linked list :

typedef struct LNode{

Student   data;       // 数据域

struct LNode  *next;   // 指针域

}LNode,*LinkList;

实验要求 :

(1) 程序要添加适当的注释,程序的书写要采用 缩进格式 。

(2) 程序要具在一定的 健壮性,即当输入数据非法时, 程序也能适当地做出反应,如 插入删除时指定的位置不对 等等。

(3) 程序要做到 界面友好,在程序运行时用户可以根据相应的提示信息进行操作。

(4) 根据实验报告模板详细书写实验报告,在实验报告中给出链表 根据姓名进行查找的算法和插入算法的流程图 。

代码如下:

2016.9.17 11:55第一次上传。

2016.9.17 15:13修改:增加了空链表删除操作的特判。

2016.9.18 18:34修改:增加多个操作的模块化处理(子函数),增加可读性。

2016.9.19 17:01修改:删除多余的初始化过程。

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#define CLR(a,b) memset(a,b,sizeof(a))      //初始化
#define printOK printf("****OK****\n")
#define OK 1
#define FALL 0
#define ERROR -2
typedef struct Lnode
{char num[20];      //学号 char name[20];     //姓名int grade;      //成绩struct Lnode *next;     //指针域
}Lnode,*Linklist;
int ant = -1;      //学生人数 void Welcome()
{puts("");puts("");puts("\t\t\t\t********欢迎使用学生成绩管理系统********");puts("\t\t\t\t* 1.输入学生人数与信息                 *");puts("\t\t\t\t* 2.显示学生信息                       *");puts("\t\t\t\t* 3.根据姓名查找学生信息               *");puts("\t\t\t\t* 4.显示指定学生的信息                 *");puts("\t\t\t\t* 5.在指定位置插入学生信息             *");puts("\t\t\t\t* 6.删除指定位置的学生信息             *");puts("\t\t\t\t* 7.统计学生个数                       *");puts("\t\t\t\t* 8.退出程序                           *");puts("\t\t\t\t* \t\t----制作by——王迎港   *");puts("\t\t\t\t****************************************");puts("");puts("");
}void LnodeInit(Linklist &p)        //链节初始化
{p = (Lnode *)malloc(sizeof(Lnode));p->next = NULL;
}void LnodeInsert(int pos,Linklist L,Linklist p)        //在第pos个节点后插入p链节
{int i = 0;Linklist t;t = L;while (i != pos){t = t->next;i++;}p->next = t->next;t->next = p;
}void Query(int pos,Linklist L,Linklist &p)     //查询第pos位置的链节赋值给p
{int i = 1;p = L->next;while (i != pos){p = p->next;i++;}
}int SearchName(char cmp[],Lnode L,Linklist &p)     //匹配名字,成功返回OK,失败返回FALL,赋值给p
{p = L.next;while (p != NULL){if (strcmp(p->name,cmp) == 0)return OK;p = p->next;}return FALL;
}void LnodeDelete(int pos,Linklist t)       //删除L中第pos个节点
{int i = 0;while (i != pos-1){t = t->next;i++;}Linklist q;q = t->next;t->next = t->next->next;free(q);
}int main()
{Welcome();int op,i;int x,pos;Lnode L;L.next = NULL;Linklist p;while (1){printf ("请输入您的选择:");scanf ("%d",&op);if (op == 8)break;if (op < 1 || op > 8){puts("对不起,输入非法!");puts("");continue;}if ((op != 1 && op != 8) && ant == -1)     //检查是否录入了学生信息 {puts("对不起,您还未输入学生信息,无法进行操作!");puts("");continue;}switch (op){case 1:if (ant != -1){printf ("您已经输入过学生信息!\n\n");break;}printf ("请输入学生人数:");scanf ("%d",&ant);if (ant <= 0){printf ("输入非法,请重新输入!\n\n");continue;}for (i = 1 ; i <= ant ; i++){LnodeInit(p);printf ("请输入第%d个学生的学号(8位): ",i);scanf ("%s",p->num);printf ("请输入第%d个学生的姓名: ",i);scanf ("%s",p->name);printf ("请输入第%d个学生的成绩: ",i);scanf ("%d",&p->grade);LnodeInsert(i-1,&L,p);printOK;}puts("");break;case 2:printf ("学号\t\t姓名\t\t成绩\n");for (i = 1 ; i <= ant ; i++){Query(i,&L,p);printf ("%s\t\t%s\t\t%d\n",p->num,p->name,p->grade);}printOK;puts("");break;case 3:char cmp[20];printf ("请输入要查找的姓名:");scanf ("%s",cmp);if (SearchName(cmp,L,p))       //查找成功 {puts("查找成功,该学生的信息为:");printf ("学号:%s\t\t姓名:%s\t\t成绩:%d\n",p->num,p->name,p->grade);}elseprintf ("对不起,查无此人!\n");printOK;puts("");break;case 4:printf ("请输入要查询第几人的信息:");pos = 1;scanf ("%d",&x);if (x > ant || x <= 0){puts ("对不起,输入非法!");puts("");break;}puts("查找成功,该学生的信息为:");Query(x,&L,p);printf ("学号:%s\t\t姓名:%s\t\t成绩:%d\n",p->num,p->name,p->grade);printOK;puts("");break;case 5:printf ("请输入要插入的位置(在之后插入)(0 ~ 学生总数):");while (scanf ("%d",&x)){if (x <= ant && x >= 0)break;elseprintf ("输入非法,请重新输入您要插入的位置:");}LnodeInit(p);printf ("请输入学号(8位): ");scanf ("%s",p->num);printf ("请输入姓名: ");scanf ("%s",p->name);printf ("请输入成绩: ");scanf ("%d",&p->grade);LnodeInsert(x,&L,p);ant++;printOK;puts("");break;case 6:if (ant == 0){puts("对不起,链表已空,无法删除!");puts("");continue;}printf ("请输入要删除第几个学生:");while (scanf ("%d",&x)){if (x <= ant && x >= 1)break;elseprintf ("输入非法,请重新输入您要删除的位置:");}LnodeDelete(x,&L);ant--;printOK;puts("");break;case 7:printf ("表中学生个数为:%d\n",ant);printOK;puts("");break;}}printf ("谢谢您的使用,请按任意键退出。\n\n");system("pause");return 0;
}

学生信息统计(链表)相关推荐

  1. PTA: 6-4建立学生信息链表(20分)

    大一下半期数据结构 数据结构题目集 pta:建立学生信息链表 本题要求实现一个将输入的学生成绩组织成单向链表的简单函数. 函数接口定义: void input(); 该函数利用scanf从输入中获取学 ...

  2. 2-2 学生成绩链表处理 (20 分)

    2-2 学生成绩链表处理 (20 分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node * ...

  3. 统计专业人数。本题要求实现一个函数,统计学生学号链表中专业为计算机的学生人数。

    统计专业人数 本题要求实现一个函数,统计学生学号链表中专业为计算机的学生人数.链表结点定义如下: struct ListNode {char code[8];struct ListNode *next ...

  4. 6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。 函数接口定义: ```cpp struct stu

    6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node *c ...

  5. 实验11.2 链表 6-1 建立学生信息链表

    本题要求实现一个将输入的学生成绩组织成单向链表的简单函数. 函数接口定义: void input(); 该函数利用scanf从输入中获取学生的信息,并将其组织成单向链表.链表节点结构定义如下: str ...

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

    /[例11-10]建立一个学生成绩信息(包括学号.姓名.成绩)的单向链表,学生数据按学号由小到大顺序排列,要求实现对成绩信息的插入.修改.删除和遍历操作./ /* 用链表实现学生成绩信息的管理 */ ...

  7. 6-4 建立学生信息链表 (20 分)

    本题要求实现一个将输入的学生成绩组织成单向链表的简单函数. 函数接口定义: void input(); 该函数利用scanf从输入中获取学生的信息,并将其组织成单向链表.链表节点结构定义如下: str ...

  8. C程序范例(2)——学生管理系统”链表“实现

    1.对于学生管理系统,能够实现的方法有许多,但是今天我们用链表的方法来实现.虽然初学者很可能看不懂,但是不要紧,这是要在整体的系统的学习完C语言之后,我才编写出的程序.所以大家不必要担心.在这里与大家 ...

  9. python列表输出学生姓名学号链表_c语言!!!程序设计:建立一个学生信息链表,包括学号,姓名,成绩.(实现添加,删除,查询,排序,平均)...

    展开全部 代码如下: /*用c语言链表编写一个学生信息系统程序,62616964757a686964616fe4b893e5b19e31333365656636要求输出学生的学号,姓名,性别, 学号, ...

最新文章

  1. 2021年大数据Spark(四十二):SparkStreaming的Kafka快速回顾与整合说明
  2. 常量池之字符串常量池String.intern()
  3. 2010年第一届蓝桥杯省赛 —— 第二题
  4. 命令行下安装的tensorflow怎么打开_CourseMaker微课制作教程18:录ppt一直“正在打开……”及WPS下ppt满屏放映怎么办?...
  5. Win XP2实用的修复工具
  6. java IO流小结
  7. java文件上传maven_ssm+maven框架搭建实现ajax多文件上传功能
  8. java处理表单变量_Java自学之SpringMVC:接收表单数据
  9. 百年古董电影秒变4K高清、60FPS,AI插值,还能着色
  10. CentOS 7.2安装zabbix 3.0 LTS
  11. ANSYS18的简略安装教程
  12. BUUCTF-MISC(1)
  13. 【观察】重塑质量管理体系,筑起车企数字化转型“护城河”
  14. 带附件/密送/抄送的 javaMail 邮件发送 -- java_demo(两种实现方式)
  15. 利用 BBED 恢复非归档模式下 OFFLINE 数据文件
  16. 推特营销引流入门指南
  17. PKI体系简易JAVA实现(一):时间戳服务器TSA
  18. linux中集计和集约的区别,粗放型经济与集约型经济的区别是什么?
  19. Cypher语句总结
  20. [渝粤教育] 山东财经大学 数据库原理及应用 参考 资料

热门文章

  1. 粗糙集分类算法c语言实现,基于粗糙集分类算法的研究及应用
  2. 大学生常用软件和资源分享
  3. 北大青鸟,学生:郜龙飞,作业笔记,第二章变量、常量、算术运算符
  4. vivos9平行空间怎样切换(2021教程)
  5. Android自定义View课程表,Android 自定义View课程表表格
  6. ACM练级日志: CodeForces 414C 归并排序、逆序数和栈内存
  7. Deeper GNN
  8. pythonorm_python中ORM是什么?
  9. pytest学习和使用20-pytest如何进行分布式测试?(pytest-xdist)
  10. 淘宝小程序 九宫格抽奖