数据结构实验一实验报告.doc
实验一 线性表的基本操作一、 实验目的1、掌握线性表的定义;2、掌握线性表的基本操作,如建立、查找、插入和删除等。二、 实验容定义一个包含学生信息学号,成绩的顺序表和链表二选一,使其具有如下功能:<1> 根据指定学生个数,逐个输入学生信息;<2> 逐个显示学生表中所有学生的相关信息;<3> 根据进行查找,返回此学生的学号和成绩;<4> 根据指定的位置可返回相应的学生信息学号,成绩;<5> 给定一个学生信息,插入到表中指定的位置; <6> 删除指定位置的学生记录;<7> 统计表中学生个数。三、 实验环境Visual C+四、 程序分析与实验结果#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<string.h>#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;/ 定义函数返回值类型 typedef structchar num10; / 学号char name20; / double grade; / 成绩 student;typedef student ElemType;typedef struct LNodeElemType data; / 数据域struct LNode *next; /指针域 LNode,*LinkList;Status InitList<LinkList &L> / 构造空链表 L L=<struct LNode*>malloc<sizeof<struct LNode>>L->next=NULL;return OK;Status GetElem<LinkList L,int i,ElemType &e> / 访问链表,找到 i位置的数据域,返回给 e LinkList p;p=L->next;int j=1;while<p&&j<i>p=p->next;+j;if<!p|j>i>return ERROR;e=p->data;return OK;Status Search<LNode L,char str,LinkList &p> / 根据名字查找 p=L.next; while<p>if<strcmp<p->data.name,str>=0>return OK;p=p->next;return ERROR;Status ListInsert<LinkList L,int i,ElemType e> / 在 i个位置插入某个学生的信息 LinkList p,s;p=L;int j=0;while<p&&j<i-1>p=p->next;+j;if<!p|j>i-1>return ERROR;s=<struct LNode*>malloc<sizeof<LNode>>s->data=e;s->next=p->next;p->next=s;return OK;Status ListDelete<LinkList p,int i> / 删除 i位置的学生信息 int j=0;while<<p->next>&&<j<i-1>>p=p->next;+j;if<!<p->next>|<j>i-1>>return ERROR;LinkList q;q=p->next;p->next=q->next; delete q;return OK;void Input<ElemType *e>printf<":">scanf<"%s",e->name>printf<"学号:">scanf<"%s",e->num>printf<"成绩:">scanf<"%lf",&e->grade>printf<"输入完成nn">void Output<ElemType *e>printf<":%-20sn学号:%-10sn成绩:%-10.2lfnn",e->name,e->num,e->grade>int main<>LNode L;LinkList p;ElemType a,b,c,d;printf<"n*nn">puts<"1. 构造链表"> puts<"2. 录入学生信息">puts<"3. 显示学生信息">puts<"4. 输入,查找该学生">puts<"5. 显示某位置该学生信息"> puts<"6. 在指定位置插入学生信息">puts<"7. 在指定位置删除学生信息">puts<"8. 统计学生个数">puts<"0. 退出">printf<"n*nn">int x,choose=-1;while<choose!=0>puts<"请选择:">scanf<"%d",&choose>switch<choose>case 1:if<InitList<p>>printf<"成功建立链表nn">elseprintf<"链表建立失败nn">break;case 2:printf<"请输入要录入学生信息的人数:">scanf<"%d",&x>for<int i=1;i<=x;i+>printf<"第%d个学生:n",i>Input<&a>ListInsert<&L,i,a>break;case 3:for<int i=1;i<=x;i+>GetElem<&L,i,b>Output<&b>break;case 4:char s20;printf<"请输入要查找的学生:">scanf<"%s",s>if<Search<L,s,p>>Output<&<p->data>>elseputs<"对不起,查无此人">puts<"">break;case 5:printf<"请输入要查询的位置:">int id1;scanf<"%d",&id1>GetElem<&L,id1,c>Output<&c>break;case 6:printf <"请输入要插入的位置:">int id2;scanf<"%d",&id2>printf<"请输入学生信息:n">Input<&d>if<ListInsert<&L,id2,d>>x+;puts<"插入成功">puts<"">elseputs<"插入失败">puts<"">break;case 7:printf<"请输入要删除的位置:">int id3;scanf<"%d",&id3>if<ListDelete<&L,id3>>x-;puts<"删除成功">puts<"">elseputs<"删除失败">puts<"">break;case 8:printf<"已录入的学生个数为:%dnn",x>break;printf<"nn您的使用,请按任意键退出nnn">system<"pause"> return 0;用户界面:(1) 根据指定学生个数,逐个输入学生信息:(2) 逐个显示学生表中所有学生的相关信息:(3) 根据进行查找,返回此学生的学号和成绩:(4) 根据指定的位置可返回相应的学生信息学号,成绩:(5) 给定一个学生信息,插入到表中指定的位置:(6) 删除指定位置的学生记录:(7) 统计表中学生个数:五、 实验总结数据结构是一门专业技术基础课。它要求学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构,存储结构及相应的算法,并初步掌握算法的时间分析和空间分析技术。不仅要考虑具体实现哪些功能,同时还要考虑如何布局,这次的实验题目是根据我们的课本学习进程出的,说实话,我并没有真正的读懂书本的知识,所以刚开始的时候,感到很棘手,于是又重新细读课本,这一方面又加强了对书本的理解,在这上面花费了一些心血,觉得它并不简单,是需要花大量时间来编写的。在本次实验中,在程序构思及设计方面有了较大的锻炼,能力得到了一定的提高。