1、0实验一 线性表的实验实验课程名: C 语言程序设计专业班级: 学号: 姓名 实验时间: 实验地点: 指导教师: 一、实验目的及要求1、掌握用Visual C+6.0调试顺序表的基本方法。2、掌握顺序表的基本操作,插入、删除、查找、以及有序顺序表的合并等算法的实现。3、掌握用Visual C+6.0上机调试单链表的基本方法。4、掌握单链表的插入、删除、查找、求表长以及有序单链表的合并算法的实现。5、进一步掌握循环单链表的插入、删除、查找算法的实现。二、实验内容、任务一:用顺序表实现通讯录管理(2)构建如表 1所示的顺序表并输出检验,实现表 1。(3)增加插入记录的功能并输出检验,实现表 2。(
2、4)增加按学号查找的功能并运行验证。(5)增加删除记录的功能并运行验证。表 1学号 姓名 性别 手机号码 QQ号2013001 张珊 女 13800001919 34578表 22013002 李思 女 13910121978 87965322013003 陈琪 女 13789450012 37891232013004 王强 男 13634567856 65437832013005 赵括 男 13534408976 56792013006 刘刚 男 13386543211 98315注意:用结构化程序设计的方法实现即(其中的)把单一功能设计成一个独立的函数。如构建顺序表设计成一个函数,同样插入
3、、查找、删除、输出也设计成独立的函数。解答:(1)源代码:#include#include#include#define MaxSize 10typedef structchar xuehao14;/学号char name20; /姓名int sex; /性别char tel14; /联系电话char qq12; /QQ号ElemType;typedef structElemType *list;int length;1int size;SeqList;void InitSeqList( SeqList *L)char flag;int i,n;ElemType *p;L-list=( Ele
4、mType * )malloc(MaxSize*sizeof( ElemType );L-length=0 ;L-size=MaxSize ;printf(“是否输入初始数据?(Y/N)“);scanf(“%c“,if(flag=N|flag=n) return;printf(“请输入初始化数据的个数:“);scanf(“%d“,if(nL-size) printf(“数据太多,不足以存储!“);return;p=L-list;L-length=n;for(i=0;ixuehao,p-name , p+;return;void PrintSeqList(SeqList *L)int i;pri
5、ntf(“学号 姓名 性别 联系电话 QQ 号n“);for( i=0 ; ilength ; i+ )printf(“%st%st“,L-listi.xuehao,L-listi.name ); if(L-listi.sex)printf(“男“);else printf(“女“);printf(“t%st%6sn“, L-listi.tel ,L-listi.qq );2/*int main()SeqList L;InitSeqList( PrintSeqList( return 0;*/ int InsertSeqList(SeqList *L,int i,ElemType *e)Ele
6、mType *q,*p;if(L-length+1L-size ) printf(“表满,失败!“);return 0;if(iL-length+1) printf(“插入位置错误,失败!“);return 0;q=for(p=p=q;p-)*(p+1)=*p ;*(p+1)=*e;L-length+;return 1;/*int main()ElemType e;SeqList L;InitSeqList(PrintSeqList(printf(“请输入要插入的数据(学号 姓名 性别( 0或 1) 联系电话 QQ号):n“);scanf(“%s%s%d%s%s“,e.xuehao,e.nam
7、e , printf(“学号 姓名 性别 联系电话 QQ 号n“);printf(“%st%st“,e.xuehao,e.name ); if(e.sex)printf(“男“);else printf(“女“);printf(“t%st%6sn“, e.tel ,e.qq ); InsertSeqList(PrintSeqList(return 0;*/int LocateList(SeqList *L,char *x)3int i=0;while(ilength if(ilength )printf(“n学号 姓名 性别 联系电话 QQ号n“);printf(“%st%st“,L-list
8、i.xuehao,L-listi.name);if(L-listi.sex) printf(“ 男 “); else printf(“ 女 “);printf(“%st%6sn“,L-listi.tel,L-listi.qq);return i+1;return 0; /*int main()SeqList L;InitSeqList(PrintSeqList(printf(“输出查询结果:n“);LocateList(return 0;*/int DeleteList(SeqList *L,int i) int j;ElemType *q,*p;if(L-length =0) printf(
9、“表空,删除失败!n“);return 0;if(iL-length) printf(“删除位置错,失败!n“);return 40;p=for(q=qlength -;return 1;int main()int i;SeqList L;InitSeqList(PrintSeqList(printf(“请输入删除位数:“);scanf(“%d“, DeleteList(PrintSeqList(return 0;(2)运行结果:2.插入功能53.查询功能4.删除功能6(3)运行结果分析:本次作业利用C语言实现顺序表初始化、插入、删除、查找、的基本操作。任务二:用链表实现通讯录管理1、 构建通
10、讯录的链表并输出检验,实现表 1。2、增加插入记录的功能并输出检验,实现表2。3、增加按学号查找的功能并运行验证。4、增加删除记录的功能并运行验证。解答:(1)源代码:#include#include#includetypedef structchar xuehao14;/学号char name20; /姓名int sex; /性别char tel14; /联系电话char qq12; /QQ号DataType;typedef struct LNodeDataType data;struct LNode *next;LNode,*LinkList;LinkList CreatList()/头插
11、法建立链表7LinkList head;head = (LinkList)malloc(sizeof(LNode); LinkList p , s ;s = head ;char flag=y;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%d%s%s“,p-data.xuehao,p-data.name,p-next = s-next ;s-next =
12、p ;s = p ;getchar();printf(“继续输入吗?(y/n):“);scanf(“%c“,printf(“n“);return head;void PrintList(LinkList head)LNode *p;p=head-next;printf(“学号 姓名 性别 联系电话 QQ号n“);printf(“-n“);while(p!=NULL)printf(“%-14s%-14s“,p-data.xuehao,p-data.name);if(p-data.sex) printf(“男 “); else printf(“女 “);printf(“%-14s%-10sn“,p
13、-data .tel,p-data.qq);printf(“-n“);p=p-next ;8/*int main()LinkList head;head=CreatList();PrintList(head);return 0;*/void InsertLinkList(LinkList head)/考虑实际情形,在教材的基础作了一个变化,将插入位置和插入的数据信息改为输入,不作为形参传入信息。LinkList p,s;int i;int j;p=head-next;j=1;printf(“请输入要插入结点位置:“);scanf(“%d“,while(pj+;if(!p|jdata.xueha
14、o,s-data.name,s-next =p-next ;p-next =s;return;void GetElemList(LinkList head,DataType *e)/读取位置改为在函数内输入LinkList p;int i,j=1;printf(“请输入要读取第几个元素:“);scanf(“%d“,9p=head-next;while(pj+;if(!p|ji) printf(“没有找到!n“);return;printf(“学号 姓名 性别(0 或 1) 联系电话 QQ号n“);printf(“%-14s%-14s“,p-data.xuehao,p-data.name);if
15、(p-data.sex) printf(“ 男 “); else printf(“ 女 “);printf(“%-14s%-10sn“,p-data .tel,p-data.qq);e=int DeleteElemLinkList(LinkList head,DataType *e)LinkList p,q;int i;int j;p=head;j=1;printf(“请输入要删除结点位置:“);scanf(“%d“,while(pj+;if(!p|jnext ;e=p-next =q-next ;free(q);return 1;int main()LinkList head;DataTyp
16、e e;int choice;10doprintf(“ 通讯录管理系统n“);printf(“=n“);printf(“ 0:退出n“);printf(“ 1:建立通讯录n“);printf(“ 2:插入n“);printf(“ 3:删除n“);printf(“ 4:查询n“);printf(“ 5:输出n“);printf(“=n“);printf(“请选择 0-5n“);scanf(“%d“,while(choice5)printf(“输入错误,请重新输入:“);scanf(“%d“,switch(choice)case 0:exit(1);case 1:head=CreatList();
17、break;case 2:InsertLinkList(head);break;case 3:DeleteElemLinkList(head,break;case 4:GetElemList(head,break;case 5:PrintList(head);break;while(choice);return 0;(2)运行结果:1112131415(3)运行结果分析:利用链表构建通讯录,然后通过各个节点之间的联系完成构建、插入、删除、查询的功能。16三、实验小结本次实验我知道了用C语言顺序表的基本方法。掌握了顺序表的基本操作,插入、删除、查找、以及有序顺序表的合并等算法的实现。了解用Visual C+6.0上机调试单链表的基本方法。了解了单链表的插入、删除、查找、求表长以及有序单链表的合并算法的实现。