1 / 40
文档名称:

数据结构实验报告技术总结.doc

格式:doc   大小:3,154KB   页数:40页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据结构实验报告技术总结.doc

上传人:s0012230 2017/4/26 文件大小:3.08 MB

下载得到文件列表

数据结构实验报告技术总结.doc

相关文档

文档介绍

文档介绍:Practice Report for Data Structures and Algorithm Analysis Data Structures C our seR eport Candidate: Student Number: 2010100 0639 Major :C ommunication E ngineering Supervisor : Wu rangzhong China University of Geosciences(Wuhan) Wuhan, Hubei 430074, P. R. China july 12, 201 3 链表实现线性表一、实验目的与要求 1、实现单链表的建立; 2、掌握单链表的插入、删除和查找运算; 3、熟练进行 C语言源程序的编辑调试。二、实验内容(1)建立带表头结点的单链表; 首先输入结束标志,然后建立循环逐个输入数据,直到输入结束标志。数据输入的函数为: LNode *createtail() { LNode *s,*r; int x,tag; printf("input the sign of ending:"); /* 输入结束标志*/ scanf("%d",&tag); h=(LNode * )malloc(sizeof(LNode)); /* 建立表头结点*/ h->data=tag; r=h; printf("input the data:"); scanf("%d",&x); while(x!=tag) /* 建立循环逐个输入数据*/ { s=(LNode * )malloc(sizeof(LNode)); s->data=x; r->link=s; r=s; scanf("%d",&x); } r->link=NULL; return h; }(2)输出单链表中所有结点的数据域值; 首先获得表头结点地址,然后建立循环逐个输出数据,直到地址为空。数据输出的函数为: void output(LNode *h) { LNode *r; int i; r=h; for(i=1;r->link!=NULL;i++) { printf("%d.%d\n",i,r->link->data); r=r->link; }}( 3)输入 x,y 在第一个数据域值为 x的结点之后插入结点 y,若无结点 x, 则在表尾插入结点 y; 建立两个结构体指针, 一个指向当前结点, 另一个指向当前结点的上一结点, 建立循环扫描链表。当当前结点指针域不为空且数据域等于 x 的时候, 申请结点并给此结点数据域赋值为 y ,然后插入当前结点后面,退出函数;当当前结点指针域为空的时候, 申请结点并给此结点数据域赋值为 y ,插入当前结点后面,退出函数。数据插入函数为: void insert(LNode *h) { LNode *r,*s; int x,y; printf("Input the data that you want to insert:\n"); printf("x="); scanf("%d",&x); /* 输入 x值*/ printf("y="); scanf("%d",&y); /* 输入 y值*/ r=h; r=r->link; for(;;r=r->link) { if(r->data==x) /* 当当前结点指针域不为空且数据域等于 x 的时候…*/ { s=(LNode *)malloc(sizeof(LNode)); s->data=y; s->link=r->link; r->link=s; break; } if(r->link==NULL) /* 当当前结点指针域为空的时候*/ { s=(LNode *)malloc(sizeof(LNode)); s->data=y; s->link=NULL; r->link=s; break; }}}( 4)输入 k,删除单链表中所有的结点 k,并输出被删除结点的个数。建立三个结构体指针, 一个指向当前结点, 另一个指向当前结点的上一结点, 最后一个备用;建立整形变量 l=0 ;建立循环扫描链表。当当前结点指针域为空的时候,如果当前结点数据域等于 k ,删除此结点, l++ ,跳出循环,结束操作;如果当前结点数据域不等于 k, 跳出循环, 结束操作。当当前结点指针域不为空的时候, 如果当前结点数据域等于 k, 删除此结点, l++ , 继续循环操作; 如果当前结点数据域不等于 k, 指针向后继续扫描。循环结束后函数返回变量 l 的值, l 便是删除的结点的个数。数据删除函数为: int del(LNode *h) { LNode *r,*s,*t; int k,l=0; printf("Input the data th