赞
踩
一、实验目的
(1) 掌握顺序表的概念及实现方式。
(2) 掌握顺序表的存储结构及主要运算:建立、查找、插入、删除等。
二、实验环境
Windows 10,Microsoft Visual C++ 2010 Express
三、实验内容
1、内容描述
定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能:
(1) 逐个输入学生信息,建立信息表;
(2) 显示信息表中所有学生的相关信息;
(3) 根据姓名进行查找,返回此学生的学号和成绩;
(4) 给定一个学生信息,插入到表中指定的位置;
(5) 删除指定位置的学生记录;
(6) 统计表中学生人数。
2、实现代码
#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct{ char no[10]; //学号 char name[20]; //姓名 int mark; //成绩 }student; typedef struct{ student *elem; //存储空间的基地址 int length; }sqlist; bool initlist(sqlist &L){ int n; printf("输入学生人数:"); scanf("%d",&n); L.elem=(student *)malloc(50*sizeof(student)); if(L.elem==NULL) return false; L.length=0; printf("输入学生信息,按“学号 姓名 成绩”输入\n"); for(int i=0;i<n;i++){ printf("输入第%d位学生信息:",i+1); scanf("%s %s %d",&L.elem[i].no,&L.elem[i].name,&L.elem[i].mark); } L.length=n; return true; } bool displist(sqlist L){ if(L.elem==NULL){ printf("请建立学生信息表!"); return false; } for(int i=0;i<L.length;i++){ printf("学号:%s 姓名:%s 成绩:%d\n",L.elem[i].no,L.elem[i].name,L.elem[i].mark); } return true; } bool deletelist(sqlist &L){ if(L.elem==NULL){ printf("请建立学生信息表!"); return false; } int i; printf("输入删除的位置序号:"); scanf("%d",&i); if(i<=0||i>L.length+1){ printf("请输入正确的序号!"); return false; } for(int j=i;j<L.length;j++){ L.elem[j-1]=L.elem[j]; } L.length--; return true; } bool countlist(sqlist L){ if(L.elem==NULL){ printf("请建立学生信息表!"); return false; } printf("学生人数为:%d\n",L.length); return true; } bool inserlist(sqlist &L){ if(L.elem==NULL){ printf("请建立学生信息表!"); return false; } int i; printf("输入插入的位置序号:"); scanf("%d",&i); if(L.length>=50){ printf("顺序表已满!"); return false; } if(i<=0||i>L.length+1){ printf("请输入正确的序号!"); return false; } for(int j=L.length-1;j>=i-1;j--){ L.elem[j+1]=L.elem[j]; } printf("输入插入的学生信息,按“学号 姓名 成绩”输入\n"); scanf("%s %s %d",&L.elem[i-1].no,&L.elem[i-1].name,&L.elem[i-1].mark); L.length++; return true; } bool seeklist(sqlist L){ int flag=0; char na[20]; if(L.elem==NULL){ printf("请建立学生信息表!"); return false; } printf("输入查找的姓名:"); scanf("%s",na); for(int i=0;i<L.length;i++){ if(strcmp(L.elem[i].name,na)==0){ flag=1; printf("学号:%s 成绩:%d\n",L.elem[i].no,L.elem[i].mark); } } if(!flag) printf("未找到相关信息!\n"); return true; } void main(){ int choose=0; sqlist L; L.elem=NULL; L.length=0; printf("欢迎进入学生信息管理系统!\n" "1.建立\n" "2.显示\n" "3.查找\n" "4.插入\n" "5.删除\n" "6.计数\n" "7.退出\n" ); while (choose!=7) { printf("\n选择序号:"); scanf("%d",&choose); switch(choose) { case 1: if(!initlist(L)) printf("建立失败!\n"); else printf("建立成功!\n"); break; case 2: if(!displist(L)) printf("显示失败!\n"); else printf("显示成功!\n"); break; case 3: if(!seeklist(L)) printf("查找失败!\n"); else printf("查找成功!\n"); break; case 4: if(!inserlist(L)) printf("插入失败!\n"); else printf("插入成功!\n"); break; case 5: if(!deletelist(L)) printf("删除失败!\n"); else printf("删除成功!\n"); break; case 6: if(!countlist(L)) printf("计数失败!\n"); else printf("计数成功!\n"); break; case 7: free(L.elem); break; } } }
四、实验体会
通过本次实验,掌握了定义线性表的顺序存储类型,加深了对顺序存储结构的理解,进一步巩固和理解了顺序表的基本操作,如建立、查找、插入和删除等。同时,也体会到顺序存储结构的缺点:在插入或删除操作时,需要移动大量的元素,且长度相对固定,当表中数据元素个数较多且变化较大时,操作复杂。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。