数据结构课设_第1页
数据结构课设_第2页
数据结构课设_第3页
数据结构课设_第4页
数据结构课设_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、姓名:课程名称:数据结构任课教师: 吴军良实验题目:线性表的基本操作实验环境:Vi sua I C+ 6, 0实验目的:1、掌握线性表的定义;2、掌握线性表的基本操作,如建立、查找、插入和删除等。实验内容:定义一个包含学生信息(学号,姓名,成绩)的的顺序表和链表,使其具有如下功能:(1)根据指定学生个数,逐个输入学生信息;(2)逐个显示学生表中所有学生的相关信息;(3)根据姓名进行查找,返回此学生的学号和成绩;(4)根据指定的位置可返回相应的学生信息(学号,姓名,成绩);(5)给定一个学生信息,插入到表中指定的位置;(6)删除指定位置的学生记录;(7)统计表中学生个数。实验提示:学生信息的定义

2、:typedef struct char no 8;8 位学号char name 20 ; /姓名int price; 成绩Student;顺序表的定义typedef struct Student *elem;指向数据元素的基地址int length;线性表的当前长度SqList;链表的定义:typedef struct LNodeStudent data;数据域struct LNode *next; 指针域LNode, *LinkList;else high=mid-1;/whileif(lowhigh)return -1;void main() StuList L;L. elem=(Stu

3、dent *)malloc (LIST INIT SIZE*sizeof(Student);if(!L. elem) exit (ERROR);L. listsize=LIST_INIT_SIZE;int pos, num, boolean= 1;char cho,y_n;printf C n* * WELCOME * nn);printf(重新输入信息请按A,读取原信息请按B:n);printf(读取原信息请先保存!)n);scanf(%c, &y_n);if(y_n二=A) printf Ct请逐个输入学生信息:n);Input_stu(L);printf (t学生信息表建立成功! n);

4、)if(y_n=,B)read (L);do printf (nCASE:n);printf C A:显示信息tB:插入信息tC:删除信息tD:计算总数n);printfC E:学号排序tF:查找学号tG:姓名排序tH:查找姓名n);printf ( Q:退出n 你选择:);scanf(n%c, &cho);switch(cho) case A :show stu(L) ;break;case B :;Insert_stu(L, pos);break;case C :Delete_stu(L,pos);break;case D :printf (t 学生总数是:%2dn,z, L. total

5、) ;break;case E:num_QuickSort(L);break;case F:printf(t请确保已经按学号排序,否那么可能出错!n);pos=num_search_bin_stu(L);if (pos=l)printf (z,tSearch failed!,z);else printf (,ztNo. %d is:t Name: %st Score:%3d ;n L. elempos. num, L. elempos. name, L. elempos. score) ;break;case G :name_Binsert_sort(L);printf (z,tName_Bi

6、nary_Sort have done! n,z) ;break;case H :printf(t请确保已经按姓名排序,否那么可能出错!n);pos=name search bin stu(L);if (pos=-l)printf (,ztSearch failed!z,);else printf (,ztName %s is: tNo. : %dt Score:%3d ; n ,L. elempos. name, L. elempos. num, L. elempos. score);break;case Q :boolean=0;default:break;!while(boolean!=

7、0);printf (保存请按Y,否那么退出。);scanf (n%c”,&y_n);if(y_n二二Y)re_save (L);else exit(0);测试结果1)读取并显示文件信息:2)在指定位置插入学生信息:你选择:B输入插入位置:2Input the Num 3name 3 score: 23 ANNA 86The record have inserted你选择:A、学生信息的记录如下:(Press Enter to go next J): *Score:100 ;Score:86 ;Score:89 ; :* * * * No. 12 No. 23 No. 32* * * * *

8、* Name: Name: Name:* 0VE1* * * *YILI ANNA SUJING3)统计学生总数:你选择:D学生总数是:34)按姓名排序:你拄择:GName_Binary_Sort have done J小心+ 上学生信息的记录如下:(Press Enter to go next J): *Score:86 ;Score:8g ;Score:100 ;* * * * No. 23 No. 32 No. 12* * * Name: Name: Name:* * * * ANNA SUJING YILI* OVER *5) 按姓名查找:7七4 口你选择田请确保已经按姓名排序,否那么

9、可能出错! 输入要查找的姓名:YIL工Name YILI is: No. : 12 Score:100 ;6)按学号排序:学生信息的记录如下:(Press Enter to go next J):* * * * No. 12 No. 23 No. 32* * * * * * Name: Name: Name:* * * *YILIANNASUJING* OVER * * *Score:100 ;Score:86 ;Score:8g ;7)按学号查找:R Ar iL 1 I你自择:F请确保已经按学号排序,否那么可能出错!输入要查找的学号:23No. 23 is:Name: ANNA Score:

10、 86 ;CASE:8)删除指定位置的记录:尔选择:C输入删除位置:3The deleted record is :No. 32Name: SUJING Score: 89 ;* * * * No. 12 No. 23* * * *删除后::A学生信息的记录如下:(Press Enter to go next J):Name: YILIScore:100 ;Name: ANNAScore:86 ;* OVER *9)操作后保存:你选择:Q保存请按Y,否那么退出。Y 情按任意键继续.半:10)输入指定个数的学生信息:-Ini xiEl飞八重要数据京面课程设计程序Student.重新输入信息请按A

11、,读取原信息请按B : A请逐个愉入学生信息:Exp:101 zhangsan 98Input the total number:2 Input the Num 9Name 3 Score( 102 YILI 98 105 YANG 99学生信息表建立成功!CASE:A:显不信息E:学号排序Q:退出 卜尔选择:AB:插入信息F:查找学号C:删除信息G:姓名排序D:计算总数H:查找姓名学生信息的记录如下:(Press* *Enter togonext J):No. 102No. 105Name: YILIName: YANGScore:98 ;Score:99 ;* * * * * OVER *

12、 * * * *实验要求:(1)程序要添加适当的注释,程序的书写要采用缩进格式。(2)程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反响,如插 入删除时指定的位置不对等等。(3)程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。(4)根据实验报告模板详细书写实验报告,在实验报告中给出链表根据姓名进行查找的 算法和插入算法的流程图。(5)作业下次上机课上交。顺序表的源程序保存为SqList.cpp,链表的源程序保存为 LinkList.cpp,实验报告命名为:实验报告l.doc。源程序和实验报告压缩为一个文件(如 果定义了头文件那么一起压缩),按以下方式命名:学

13、号姓名如070814101薛力.rar。程序代码:#include#include#includetypedef int Status;#define OK 1ttdefine ERROR 0ttdefine LIST_INIT_SIZE 100ttdefine LISTINCREMENT 20struct stu _type 定义学生信息(学号,姓名,成绩)数据结构类型int num;char name10;int score;typedef struct stu_type Student;typedef struct 定义存放学生信息的顺序表Student *elem;int total;

14、 当前学生总数int listsize;Stu_List;void read(Stu_List &L) 从stu-total文件中读取信息到学生表先读取stu-total文件中保持的学生总数FILE *fp_t;fp_t=fopen(stu-total,rb);if (fp_t=NULL)printf (Z/Stu total not found! nz,);if (fread (&(L. total), sizeof (int), 1, fp_t) !=1)printf(,zread error);fclose(fp_t);再读取学生信息FILE *fp;int i;if(fp=fopen(

15、stu-list,rb)=NULL)printf(cannot open filen);for (i=0;iL. total;i+)if(fread(&L. elemi, sizeof (struct stu type),1, fp)! = 1) printf (z,file read errorn,z);fclose(fp);)void re save (Stu List L)操作之后重新保存到文件FILE *fp;fp二fopen(Stu-List,wb);if (fp=NULL)printf (z,Stu List not found! nz,);for (int i=0;iL. tot

16、al;i+) if(fwrite(&L. elemi, sizeof(struct stu_type), 1, fp)!=1) printf(,zwrite error);fclose(fp);FILE保存学生总数fp_t=fopen(Stu-total,wb);if(fp_t=NULL)printf(,zStu_total not found !n);if(fwrite(&(L. total), sizeof(int),1,fp t)!=1)printf(,zwrite error);fclose(fp_t);Status Input_stu(Stu_List &L) /根据指定学生个数,逐

17、个输入学生信息L. total=0;while(L. totalL. listsize) Student *newbase;newbase二(Student*)realloc(L. elem,(L listsize+LISTINCREMENT)sizeof(Student);if(!newbase) exit(ERROR);L. elem=newbase;L. listsize+二LISTINCREMENT;printf (zzInput the Num , Name , Score ( Exp: 101 zhangsan 98 ):n); for (int i=0;iL. total;i+)

18、scanf (z,%d %s %dz,, &L. elemi. num,L. elemi. name, &L. elemi. score);)return OK;void show_stu(Stu_List L) 逐个显示学生表中所有学生得相关信息int i=0;printf (t 学生信息的记录如下:(Press Enter to go next!) : n,z);printf( t* * n);while(iL. totalfe&getchar () =,n,) 每回车一次输出一位学生的信息printf (z,t No. %dtName: %st Score :%d ;,L. elemi.

19、 num, L. elemi. name, L. elemi. score);+i;)printf (z/n t* * * * * OVER * * * * *n);Status Insert_stu(Stu_List &L, int pos)在表中指定位置pos处插入一个学生的信息printf (t输入插入位置:);scanf(d, &pos);if (posL. total+1)(printf (t插入位置不合法! n);return ERROR;if (L. total=L. listsize) Student *newbase;newbase=(Student*)realloc(L.

20、elem,(L listsize+LISTINCREMENT)*sizeof(Student);if (!newbase) exit (ERROR);L.elem=newbase;L.listsize+=LISTINCREMENT;/ifStudent *p, *q;q=&(L. elempos-l);for(p=&(L. elemL. total-1);p=q;-p)*(p+l)=*p;printf (,ztlnput the Num , name , score: );scanf (,z%d %s %dz,, &L. elempos-l. num,&L, elempos-l. name,

21、&L. elempos-l. score);+L. total;printf (/ztThe record have inserted! n,z);return OK;Status Delete_stu(StuList &L, int pos) 删除指定位置pos处的学生记录printf (t输入删除位置:);scanf(%d, &pos);if (posL. total)printf (t删除位置不合法! n);return ERROR;Student *p, *q;p=&(L. elempos-l);printf (z,tThe deleted record is :n);printf (

22、z/tNo. %dt Name: %st Score:%3d ;n,L. elempos-l. num, L. elempos-l. name, L. elempos-l. score);q二L. elem+L. total-1;for(+p;p=q;+p)*(pT)=*p;-L. total;return OK;Status name_Binsert_sort(Stu_List &L)按照姓名将学生记录折半插入排序int low, high, mid, i, j ;Student pivot; 哨兵for(i=l;i=L. total-1;+i) pivot=L. elemi;low=0;high=i-l;while(low=high) /折半找到插入位置mid= (low+high) /2;if(strcmp(pivot. name, L. elemmid. name) = high+1; - j)记录后移L. elemj+l=L. elemj;L. elemj+l=

温馨提示

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

评论

0/150

提交评论