129627289435312500实验一 线性表基本操作的编程实现
更新时间:2023-11-23 02:20:01 阅读量: 教育文库 文档下载
实验一 线性表基本操作的编程实现
【实验目的】
线性表基本操作的编程实现 要求:
线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构可以在顺序结构或链表结构中任选,可以完成部分主要功能,也可以用菜单进行管理完成大部分功能。还鼓励学生利用基本操作进行一些更实际的应用型程序设计。
【实验性质】
验证性实验(学时数:2H)
【实验内容】
把线性表的顺序存储和链表存储的数据插入、删除运算其中某项进行程序实现。建议实现键盘输入数据以实现程序的通用性。为了体现功能的正常性,至少要编制遍历数据的函数。
【注意事项】
1.开发语言:使用C。
2.可以自己增加其他功能。
【思考问题】
1. 线性表的顺序存储和链表存储的差异?优缺点分析? 2. 那些操作引发了数据的移动? 3. 算法的时间效率是如何体现的?
4. 链表的指针是如何后移的?如何加强程序的健壮性?
【参考代码】(以下内容,学生任意选择一个完成即可)
(一)利用顺序表完成一个班级学生课程成绩的简单管理 1、预定义以及顺序表结构类型的定义 (1) #include
#include
#define ListSize 100 //根据需要自己设定一个班级能够容纳的最大学生数 (2) typedef struct stu {
int num; //学生的学号 char name[10]; //学生的姓名 float physics; //物理成绩 float math; //数学成绩 float english; //英语成绩
}STUDENT; //存放单个学生信息的结构体类型 typedef struct List {
STUDENT stu[ListSize]; //存放学生的数组定义,静态分配空间
int length; //记录班级实际学生个数 }LIST; //存放班级学生信息的顺序表类型 2、建立班级的学生信息
void listcreate(LIST *Li,int m) //m为该班级的实际人数 {
int i;
Li->length=0;
for(i=1; ;i++) //输入m个学生的所有信息 {
printf(\请输入第%d位学生的信息:\\n\ printf(\学号=\
scanf(\输入第i个学生的学号 printf(\姓名=\
scanf(\输入第i个学生的姓名 printf(\物理成绩=\
scanf(\输入第i个学生的物理成绩 printf(\数学成绩=\
scanf(\输入第i个学生的数学成绩 printf(\英语成绩=\
scanf(\输入第i个学生的英语成绩
; //学生人数加1 } }
3、插入一个学生信息
int listinsert(LIST *Li,int i) //将学生插入到班级Li的第i个位置。 {
int j; STUDENT e;
if(Li->length== ) //测试存储空间是否被占满 {
printf(\无更多的存储空间!\\n\ return 0; }
if (i<1||i>Li->length+1) //插入位置检验,如果错误就返回0退出程序。 return 0; else {
printf(\请输入插入的学生信息:\\n\ printf(\学号=\ scanf(\ printf(\姓名=\ scanf(\ printf(\物理成绩=\
scanf(\ printf(\数学成绩=\ scanf(\ printf(\英语成绩=\ scanf(\
for(j=Li->length; ;j--) //从i位置到最后的元素依次往后移动 Li->stu[j+1]= ;
Li->stu[i]=e; //学生e放入到i位置 Li->length++; //学生实际人数加1 return 1; } }
4、删除一个学生信息
int listdel(LIST *Li,int i) //删除第i个学生的信息 {
int j;
if (i<1||i>Li->length+1) //删除位置检验,如果错误就返回0退出程序。 return 0; else {
if(i
for( ;j<=Li->length;j++)
//从删除位置后一个到最后的元素依次往前移动
; Li->length--; return 1; } }
5、显示所有学生信息
void listdisplay(LIST *Li) { int i; printf(\班级学生信息如下:\\n\ printf(\学号 姓名 物理成绩 数学成绩 英语成绩\\n\ for(i=1;i<=Li->length;i++)
printf(\sics,Li->stu[i].math,Li->stu[i].english); }
6、编写主函数main,要求测试以上的listcreat、listinsert、listdel和listdisplay void main() {
LIST stu_info; int i,num;
printf(\请输入学生的总人数:\
scanf(\
listcreate(&stu_info, ); listdisplay(&stu_info); getch();
printf(\请输入待插入学生的位置:\ scanf(\ printf(\
listinsert(&stu_info, ); getch();
listdisplay(&stu_info); getch();
printf(\请输入需要删除学生的位置:\ scanf(\
listdel(&stu_info, ); getch();
listdisplay(&stu_info); }
(二)利用单链表完成一个班级学生课程成绩的简单管理 1、单链表结构体类型的定义 #define NULL 0 #include
int num; //学生的学号 char name[10]; //学生的姓名 float physics; //物理成绩 float math; //数学成绩 float english; //英语成绩
}STUDENT; //存放单个学生信息的结构体类型
typedef struct Snode {
STUDENT data; //结点的值
struct Snode *link; //指向下一个结点的地址 }SNODE;
2、建立班级学生信息
SNODE *listcreate(int n) //n为该班级的实际人数 {
int i;
SNODE *head,*p,*q; if(n==0)
return NULL; //如果要创建的是空表,返回NULL head=p=(SNODE *)malloc(sizeof(SNODE)); //动态建立第一个结点,head指针指向 printf(\请输入第1位学生的信息:\\n\
printf(\学号=\
scanf(\ //输入第1个学生的学号 printf(\姓名=\
scanf(\ //输入第1个学生的姓名 printf(\物理成绩=\
scanf(\//输入第1个学生的物理成绩 printf(\数学成绩=\
scanf(\输入第1个学生的数学成绩 printf(\英语成绩=\
scanf(\输入第1个学生的英语成绩 for(i=2;i<=n;i++) //插入剩下的n-1个学生 {
printf(\请输入第%d位学生的信息:\\n\ q=(SNODE *)malloc(sizeof(SNODE));
printf(\学号=\scanf(\ printf(\姓名=\ printf(\物理成绩=\ printf(\数学成绩=\ printf(\英语成绩=\ q->link=NULL; p->link=q; p=q; }
return head; }
3、插入一个学生信息
SNODE *listinsert(SNODE *Li_head,int i) //将学生插入到班级Li_head的第i个位置。 {
SNODE *p,*q,*newsnode;
int m=0; //用来统计学生位置 if(i<1)
return Li_head; //插入位置检验,如果错误就返回0退出程序 newsnode=(SNODE *)malloc(sizeof(SNODE)); //产生新结点 printf(\请输入待插入学生的信息:\\n\ printf(\学号=\
scanf(\ printf(\姓名=\
scanf(\ printf(\物理成绩=\
scanf(\ printf(\数学成绩=\
scanf(\ printf(\英语成绩=\
scanf(\
p=Li_head,q=NULL; //查找第i个结点,使p指向i,q指向第i-1个结点
正在阅读:
129627289435312500实验一 线性表基本操作的编程实现11-23
创伤急救题库(1)11-02
护理工作核心制度(其中8项)04-03
初中数学中考一轮复习(29)03-08
红蜻蜓集团企业文化体系手册06-03
物理化学下册习题01-17
爱情童话故事02-08
励志优秀文摘02-18
微信一个字的名字,1个字的微信网名02-11
述职报告(123)08-30
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 基本操作
- 1296272894353125
- 线性
- 编程
- 实验
- 实现
- 00
- CRJ--200正常飞行程序 - 图文
- 新增值税章节练习及答案
- 钢结构试题
- 二海昌西安环境分析
- 法安通控制器操作手册20121011
- 普佛度亡功德文疏
- 铁路试验 人员考试题(二)
- 专题15 短文改错(仿真押题)-2017年高考英语命题猜想与仿真押题(原卷版)
- 2元素周期表和元素周期律复习
- 2010年C++笔试试卷(A卷)答案&解析准完整版
- 12姜丽第4周旅游第三章第四节教案
- 最新-2019年4月关于留守儿童的暑期社会实践调查报告 精品
- 六年级信息技术《奇妙的爬行动物》教案
- 安徽省蚌埠市第二中学2017-2018学年高一英语上学期期中试题
- 小学英语教学法试题及答案(教师考调专用)
- 苏州市乡村旅游的发展状况与对策分析
- 高职财经类专业“双师型”教学团队建设探究-精品文档
- 汶川县映秀镇特色魅力乡镇规划
- 煤与瓦斯突出矿井新水平新采区防突专项设计和验收实施办法
- Vb模拟试题