实验一-线性表基本操作的编程实现_第1页
实验一-线性表基本操作的编程实现_第2页
实验一-线性表基本操作的编程实现_第3页
实验一-线性表基本操作的编程实现_第4页
实验一-线性表基本操作的编程实现_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一线性表基本操作的编程实现【实验目的】线性表基本操作的编程实现要求:线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构可以在顺序结构或链表结构中任选,可以完成部分主要功能,也可以用菜单进行管理完成大部分功能。还鼓励学生利用基本操作进行一些更实际的应用型程序设计。【实验性质】验证性实验(学时数:2H)【实验内容】把线性表的顺序存储和链表存储的数据插入、删除运算其中某项进行程序实现。建议实现键盘输入数据以实现程序的通用性。为了体现功能的正常性,至少要编制遍历数据的函数。【注意事项】1.开发语言:使用C。2.可以自己增加其他功能。【思考问题】线性表的顺序存储和链表存储的差异?优缺点分析?那些操作引发了数据的移动?算法的时间效率是如何体现的?链表的指针是如何后移的?如何加强程序的健壮性?【参考代码】(以下内容,学生任意选择一个完成即可)(一)利用顺序表完成一个班级学生课程成绩的简单管理1、预定义以及顺序表结构类型的定义(1)#include<stdio.h>#include<conio.h>#defineListSize100//根据需要自己设定一个班级能够容纳的最大学生数(2)typedefstructstu{intnum; //学生的学号charname[10]; //学生的姓名floatphysics; //物理成绩floatmath; //数学成绩 floatenglish; //英语成绩}STUDENT; //存放单个学生信息的结构体类型typedefstructList{STUDENTstu[ListSize]; //存放学生的数组定义,静态分配空间intlength; //记录班级实际学生个数}LIST; //存放班级学生信息的顺序表类型2、建立班级的学生信息voidlistcreate(LIST*Li,intm)//m为该班级的实际人数{inti;Li->length=0; for(i=1;;i++)//输入m个学生的所有信息 { printf("请输入第%d位学生的信息:\n",i); printf("学号="); scanf("%d",&Li->stu[i].num);//输入第i个学生的学号 printf("姓名="); scanf("%s",&Li->stu[i].name);//输入第i个学生的姓名 printf("物理成绩="); scanf("%f",&Li->stu[i].physics);//输入第i个学生的物理成绩 printf("数学成绩="); scanf("%f",&Li->stu[i].math);//输入第i个学生的数学成绩 printf("英语成绩="); scanf("%f",&Li->stu[i].english);//输入第i个学生的英语成绩 ;//学生人数加1 }}3、插入一个学生信息intlistinsert(LIST*Li,inti) //将学生插入到班级Li的第i个位置。{ intj; STUDENTe; if(Li->length==) //测试存储空间是否被占满 { printf("无更多的存储空间!\n"); return0; } if(i<1||i>Li->length+1) //插入位置检验,如果错误就返回0退出程序。 return0; else { printf("请输入插入的学生信息:\n"); printf("学号="); scanf("%d",&e.num); printf("姓名="); scanf("%s",); printf("物理成绩="); while(p!=NULL) { m++; if() break; else { ; ; } } if(p==Li_head) //插入在表头 { newsnode->link=p; Li_head=newsnode; } else //插入在q和p之间 { ; ; } returnLi_head;}4、删除一个学生信息SNODE*listdel(SNODE*Li_head,inti) //删除链表Li_head中第i个学生的信息{ intm=0; SNODE*p,*q;p=Li_head; q=NULL; if(i<1||Li_head==NULL)//单链表为空及插入位置校验,如果错误就退出程序 returnLi_head; while(p!=NULL) { m++; if(m==i) break; else { q=p; p=p->link; } } if(p==NULL) //i位置结点没有(超过最后一个结点) returnLi_head; if(p==Li_head) //删除表头结点 Li_head=Li_head->link; else //删除非表头结点 { ; ;//释放该结点所占的空间 } returnLi_head;}5、显示所有学生信息voidlistdisplay(SNODE*Li_head){printf("班级学生信息如下:\n"); printf("学号姓名物理成绩数学成绩英语成绩\n"); while(Li_head!=NULL) {printf("%-10d%-10s%-10.2f%-10.2f%-10.2f\n", Li_head->data.num,Li_head->,Li_head->data.physics,Li_head->data.math,Li_head->data.english); ; }}6、编写主函数main,要求测试以上所编写的listcreat、listinsert、listdel和listdisplayvoidmain()//自己设计主函数完成{ SNODE*head=NULL; inti,num; printf("请输入学生的总人数:"); scanf("%d",&num);head=listcreate(); listdisplay(head); getch();printf("请输入待插入学生的位置:"); scanf("%d",&i); printf("\n"); head=listinsert(head,i);listdisplay(head); getch(); printf("请输入需要删除学生的位置:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论