实验一线性表的实验_第1页
实验一线性表的实验_第2页
实验一线性表的实验_第3页
实验一线性表的实验_第4页
实验一线性表的实验_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、实验一 线性表的实验实验课程名: C语言程序设计专业班级: 学号: 姓名 实验时间: 实验地点: 指导教师: 一、实验目的及要求1、掌握用Visual C+6.0调试顺序表的基本方法。2、掌握顺序表的基本操作,插入、删除、查找、以及有序顺序表的合并等算法的实现。3、掌握用Visual C+6.0上机调试单链表的基本方法。4、掌握单链表的插入、删除、查找、求表长以及有序单链表的合并算法的实现。5、进一步掌握循环单链表的插入、删除、查找算法的实现。二、实验内容、任务一:用顺序表实现通讯录管理(2) 构建如表1所示的顺序表并输出检验,实现表1。(3) 增加插入记录的功能并输出检验,实现表2。(4)

2、增加按学号查找的功能并运行验证。(5) 增加删除记录的功能并运行验证。表1学号姓名性别手机号码QQ号2013001张珊女1380000191934578表22013002李思女1391012197887965322013003陈琪女1378945001237891232013004王强男1363456785665437832013005赵括男1353440897656792013006刘刚男1338654321198315注意:用结构化程序设计的方法实现即(其中的)把单一功能设计成一个独立的函数。如构建顺序表设计成一个函数,同样插入、查找、删除、输出也设计成独立的函数。解答:(1)源代码:#i

3、nclude<stdio.h>#include<string.h>#include<stdlib.h>#define MaxSize 10typedef structchar xuehao14;/学号char name20; /姓名int sex; /性别char tel14; /联系电话char qq12; /QQ号ElemType;typedef structElemType *list;int length;int size;SeqList;void InitSeqList( SeqList *L)char flag;int i,n;ElemType

4、*p;L->list=( ElemType * )malloc(MaxSize*sizeof( ElemType );L->length=0 ;L->size=MaxSize ; printf("是否输入初始数据?(Y/N)");scanf("%c",&flag);if(flag='N'|flag='n') return;printf("请输入初始化数据的个数:");scanf("%d",&n);if(n>L->size) printf(

5、"数据太多,不足以存储!");return;p=L->list;L->length=n;for(i=0;i<n;i+)printf("请输入第%d个数据(学号 姓名 性别(0或1) 联系电话 QQ号):n",i+1);scanf("%s%s%d%s%s",p->xuehao,p->name , &p->sex , p->tel ,p->qq ); p+;return;void PrintSeqList(SeqList *L)int i;printf("学号 姓名 性别

6、联系电话 QQ号n");for( i=0 ; i<L->length ; i+ )printf("%st%st",L->listi.xuehao,L-> ); if(L->listi.sex) printf("男"); else printf("女"); printf("t%st%6sn", L->listi.tel ,L->listi.qq ); /*int main()SeqList L;InitSeqList( &L );Prin

7、tSeqList( &L );return 0;*/ int InsertSeqList(SeqList *L,int i,ElemType *e)ElemType *q,*p;if(L->length+1>L->size ) printf("表满,失败!");return 0;if(i<1|i>L->length+1) printf("插入位置错误,失败!");return 0;q=&(L->listi-1);for(p=&(L->listL->length-1);p>

8、=q;p-)*(p+1)=*p ;*(p+1)=*e;L->length+;return 1;/*int main()ElemType e;SeqList L;InitSeqList(&L);PrintSeqList(&L);printf("请输入要插入的数据(学号 姓名 性别(0或1) 联系电话 QQ号):n");scanf("%s%s%d%s%s",e.xuehao, , &e.sex , e.tel ,e.qq );printf("学号 姓名 性别 联系电话 QQ号n");printf(

9、"%st%st",e.xuehao, ); if(e.sex) printf("男"); else printf("女"); printf("t%st%6sn", e.tel ,e.qq ); InsertSeqList(&L,2,&e);PrintSeqList(&L);return 0;*/ int LocateList(SeqList *L,char *x) int i=0; while(i<L->length &&strcmp(L->li

10、sti.xuehao ,x ) +i; if(i<L->length ) printf("n学号 姓名 性别 联系电话 QQ号n"); printf("%st%st",L->listi.xuehao,L->); if(L->listi.sex) printf(" 男 "); else printf(" 女 "); printf("%st%6sn",L->listi.tel,L->listi.qq); return i+1; retur

11、n 0; /*int main()SeqList L;InitSeqList(&L);PrintSeqList(&L);printf("输出查询结果:n");LocateList(&L,"02");return 0;*/int DeleteList(SeqList *L,int i) int j; ElemType *q,*p; if(L->length =0) printf("表空,删除失败!n");return 0; if(i<1|i>L->length) printf("

12、删除位置错,失败!n");return 0; p=&(L->listi-1); for(q=&(L->listL->length-1);q<=p;p-) *(p-1)=*p; L->length -; return 1;int main()int i;SeqList L;InitSeqList(&L);PrintSeqList(&L);printf("请输入删除位数:");scanf("%d",&i); DeleteList(&L,i);PrintSeqList(&a

13、mp;L);return 0;(2)运行结果:2. 插入功能3. 查询功能4. 删除功能(3) 运行结果分析: 本次作业利用C语言实现顺序表初始化、插入、删除、查找、的基本操作。任务二:用链表实现通讯录管理1、 构建通讯录的链表并输出检验,实现表1。2、增加插入记录的功能并输出检验,实现表2。3、增加按学号查找的功能并运行验证。4、增加删除记录的功能并运行验证。解答:(1)源代码:#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct char xuehao14;/学号 char

14、 name20; /姓名 int sex; /性别 char tel14; /联系电话 char qq12; /QQ号DataType;typedef struct LNode DataType data; struct LNode *next;LNode,*LinkList;LinkList CreatList()/头插法建立链表 LinkList head; head = (LinkList)malloc(sizeof(LNode); LinkList p , s ; s = head ; char flag='y' head->next =NULL; while(f

15、lag='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->,&p->data.sex,p->data.tel,p->data.qq); p->next = s->next ; s->next = p ; s =

16、 p ; getchar(); printf("继续输入吗?(y/n):"); scanf("%c",&flag);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.xueha

17、o,p->); if(p->data.sex) printf("男 "); else printf("女 "); printf("%-14s%-10sn",p->data .tel,p->data.qq); printf("-n"); p=p->next ; /*int main() LinkList head; head=CreatList();PrintList(head);return 0;*/void InsertLinkList(LinkList head)

18、/考虑实际情形,在教材的基础作了一个变化,将插入位置和插入的数据信息改为输入,不作为形参传入信息。 LinkList p,s; int i; int j; p=head->next; j=1; printf("请输入要插入结点位置:"); scanf("%d",&i); while(p&&j<i-1) p=p->next ; j+; if(!p|j<i-1) printf("错误!n");return; s=(LinkList)malloc(sizeof(LNode); printf(&

19、quot;请输入要插入的数据:n"); printf("学号 姓名 性别(0或1) 联系电话 QQ号n"); scanf("%s%s%d%s%s",s->data.xuehao,s->,&s->data.sex,s->data.tel,s->data.qq); s->next =p->next ; p->next =s; return;void GetElemList(LinkList head,DataType *e)/读取位置改为在函数内输入 LinkList p;

20、int i,j=1; printf("请输入要读取第几个元素:"); scanf("%d",&i); p=head->next; while(p&&j<i) p=p->next ;j+; if(!p|j>i) printf("没有找到!n");return; printf("学号 姓名 性别(0或1) 联系电话 QQ号n"); printf("%-14s%-14s",p->data.xuehao,p->); if(p-

21、>data.sex) printf(" 男 "); else printf(" 女 "); printf("%-14s%-10sn",p->data .tel,p->data.qq); e=&(p->data);int DeleteElemLinkList(LinkList head,DataType *e) LinkList p,q; int i; int j; p=head; j=1; printf("请输入要删除结点位置:"); scanf("%d",&am

22、p;i); while(p&&(j<i) p=p->next ; j+; if(!p|j<i) printf("错误!n");return 0; q=p->next ;e=&q->data ;p->next =q->next ; free(q); return 1; int main() LinkList head; DataType e; int choice; do printf(" 通讯录管理系统n"); printf("=n"); printf(" 0:退出n"); printf(" 1:建立通讯

温馨提示

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

评论

0/150

提交评论