《数据结构实验教案.doc》由会员分享,可在线阅读,更多相关《数据结构实验教案.doc(45页珍藏版)》请在金锄头文库上搜索。
1、实验一 线性表的实验一、实验目的及要求1、掌握用Visual C+6.0调试顺序表的基本方法。2、掌握顺序表的基本操作,插入、删除、查找、以及有序顺序表的合并等算法的实现。3、掌握用Visual C+6.0上机调试单链表的基本方法。4、掌握单链表的插入、删除、查找、求表长以及有序单链表的合并算法的实现。5、进一步掌握循环单链表的插入、删除、查找算法的实现。二、实验学时4学时三、 实验任务任务一:用顺序表实现通讯录管理1、 构建通讯录的顺序表并输出检验。2、 增加插入记录的功能并输出检验。3、增加按学号查找的功能并运行验证。4、增加删除记录的功能并运行验证。任务二:用链表实现通讯录管理1、构建通
2、讯录的链表并输出检验2、增加插入记录的功能并输出检验。3、增加按学号查找的功能并运行验证。4、增加删除记录的功能并运行验证。四、实验重点、难点1、 在顺序表中移动元素。2、 在顺序表中找到正确的插入位置。3、 在单链表中寻找到第i-1个结点并用指针p指示。4、 比较两个单链表的节点数据大小。五、操作内容与要求任务一:用顺序表实现通讯录管理1、 构建如表1所示的顺序表并输出检验,实现表1。2、 增加插入记录的功能并输出检验,实现表2。3、 增加按学号查找的功能并运行验证。4、 增加删除记录的功能并运行验证。表1学号姓名性别手机号码QQ号2013001张珊女1380000191934578表220
3、13002李思女1391012197887965322013003陈琪女1378945001237891232013004王强男1363456785665437832013005赵括男1353440897656792013006刘刚男1338654321198315注意:用结构化程序设计的方法实现即(其中的)把单一功能设计成一个独立的函数。如构建顺序表设计成一个函数,同样插入、查找、删除、输出也设计成独立的函数。任务二:用链表实现通讯录管理1、构建通讯录的链表并输出检验,实现表1。2、增加插入记录的功能并输出检验,实现表2。3、增加按学号查找的功能并运行验证。4、增加删除记录的功能并运行验证。
4、实验解答参考:1、 要完成此功能,先要考虑数据类型,再给出构建顺序表的函数及输出的函数,然后可以写出主函数了。参考代码如下:#include#include#include#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef structchar xuehao14;/学号char name20; /姓名int sex; /性别char tel14; /联系电话char qq12; /QQ号ElemType;typedef structElemType *elem;/顺序表的存储空间基址,相当于一个一维的数组名int length;/
5、表的实际元素个数,即表的长度int listsize;/最大可存储的元素个数,表的长度的上限SqList;void InitSeqList(SqList &L)char flag;int i,n;ElemType *p;L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType);L.length=0;L.listsize=LIST_INIT_SIZE;printf(是否输入初始数据?(Y/N));scanf(%c,&flag);if(flag=N|flag=n) return;printf(请输入初始化数据的个数:);scanf(%d,&
6、n);if(nL.listsize) printf(数据太多,不足以存储!);return;p=L.elem;L.length=n;for(i=0;ixuehao,p-name,&p-sex,p-tel,p-qq);p+;return;void PrintSeqList(SqList &L)int i; printf(学号 姓名 性别 联系电话 QQ号n);for(i=0;iL.listsize ) printf(表满,失败!);return 0;if(iL.length+1) printf(插入位置错误,失败!);return 0;q=&(L.elemi-1);for(p=&(L.elemL
7、.length-1);p=q;-p)strcpy(p+1)-xuehao,p-xuehao);strcpy(p+1)-name ,p-name);(p+1)-sex=p-sex ;strcpy(p+1)-tel,p-tel);strcpy(p+1)-qq,p-qq);strcpy(q-xuehao,e.xuehao);strcpy(q-name ,e.name);q-sex=e.sex ;strcpy(q-tel,e.tel);strcpy(q-qq,e.qq);L.length+;return 1;主函数也要作修改如下:int main()int i;ElemType e;SqList L;
8、InitSeqList(L);PrintSeqList(L);i=2;printf(请输入要插入的数据(学号 姓名 性别(0或1) 联系电话 QQ号):n,i+1);scanf(%s%s%d%s%s,e.xuehao,e.name,&e.sex,e.tel,e.qq);InsertSeqList(L,i,e);PrintSeqList(L);3、增加下面的函数并适当调整main函数。 int LocateList(SqList &L,char *x)int i=0;while(iL.length &strcmp(L.elemi.xuehao ,x )+i;if(iL.length )print
9、f(学号 姓名 性别 联系电话 QQ号n);printf(%-14s%-14s,L.elemi.xuehao,L.elemi.name);if(L.elemi.sex) printf( 男 ); else printf( 女 );printf(%-14s%-10sn,L.elemi.tel,L.elemi.qq);return i+1;return 0;4、增加下面的函数并适当调整main函数。int DeleteList(SqList &L,int i)int j;if(L.length =0) printf(表空,删除失败!n);return 0;if(iL.length) printf(
10、删除位置错,失败!n);return 0;for(j=i;j=L.length -1;j+)strcpy(L.elemj-1.xuehao ,L.elem j.xuehao );strcpy(L.elem j-1.name ,L.elem j.name );L.elem j-1.sex =L.elem j.sex ;strcpy(L.elem j-1.tel ,L.elem j.tel );strcpy(L.elem j-1.qq ,L.elem j.qq );L.length -;return 1;任务二:1、要完成此实验,要考虑4点:数据类型如何定义?链表结点的类型具体如何定义?如何建立链
11、表?如何输出链表以便验证?#include#include#includetypedef structchar xuehao14;/学号char name20; /姓名int sex; /性别char tel14; /联系电话char qq12; /QQ号ElemType;typedef struct LNodeElemType data;struct LNode *next;LNode,*LinkList;LinkList CreatList()/头插法建立链表LinkList head;LinkList p;char flag=y;head=(LinkList)malloc(sizeof(LNode);/生成头结点head-next =NULL;while(flag=Y)|(flag=y)p=(LinkList)malloc(sizeof(LNode);if(!p) exit(-1);printf(请输入数据(学号 姓名 性别(0或1) 联系电话 QQ号):n);scanf(%s%s%