实验单链表操作验证
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
课程名称数据结构
实验名称单链表操作验证
实验类型验证型实验
实验地点计304机房实验日期2011.10.28 指导教师魏海平
专业计算机科学与技术
班级算计1001
学号1011010113
姓名张强
辽宁石油化工大学计算机与通信工程学院
数据结构实验报告评分表
实验一单链表操作验证
一.实验目的
(1)掌握线性表的链接存储结构;
(2)验证单链表及其基本操作的实现;
(3)进一步掌握数据结构及算法的程序实现的基本方法。
二.实验内容
(1)用头插法(或尾插法)建立带头结点的单链表;
(2)对已建立的单链表实现插人、删除、查找等基本操作。
三.实验步骤
1.需求分析
本演示程序用VC++编写,完成单链表的生成,任意位置的插入、删除,以及确定某一元素在单链表中的位置。
①输入的形式和输入值的范围:插入元素时需要输入插入的位置和元素的值;删除元素时输入删除元素的位置;查找操作时需要输入元素的值。在所有输入中,元素的值都是整数。
②输出的形式:在所有三种操作中都显示操作是否正确以及操作后单链表的内容。其中删除操作后显示删除的元素的值,查找操作后显示要查找元素的位置。
③程序所能达到的功能:完成单链表的生成(通过插入操作)、插入、删除、查找操作。
④测试数据:
(1)生成单链表 1 23 2 34 3 45 4 56
(2)查找1 位置为23
(3)删除数据 2
(4)插入2 67
(5)输出数据 1 23 2 67 3 45 4 56
2.源程序如下:
#include
#include
#include
#include
#define NULL 0
struct data
{
int num;
int d;
struct data *next;
};
struct data *head,*p,*tail;
int len,i;
struct data *creat()
{
int n;
len=sizeof( struct data);
printf("len=");
scanf("%d",&n);
printf("输入创建单链表:\n");
head=(struct data*)malloc(len);
printf("数据位置和数据:\n");
scanf("%d%d",&head->num,&head->d);
tail=head;
for(i=2;i<=n;i++)
{
p=(struct data *)malloc(len);
scanf("%d%d",&p->num,&p->d);
tail->next=p;
tail=p;
}
tail->next=NULL;
return(head);
}
void output(struct data *head)
{
int j;
struct data *p0,*p1;
p=head;
for(j=0;j { for(i=0;i p0=p->next; if(p->num>p0->num) {p1=p;p=p0;p0=p1;} } for(p=head;p!=NULL;p=p->next) printf("%d: %d\n",p->num,p->d); } struct data *ins(struct data *head) { struct data *p0,*p1,*p2; struct data *ins; printf("输入插入的位置和数据:"); ins=(struct data * )malloc(len); scanf("%d%d",&ins->num,&ins->d); p1=head; p0=ins; if(head==NULL) {head=p0;p0->next=NULL;} else { while((p0->num>p1->num)&&(p1->next!=NULL)) {p2=p1; p1=p1->next; } if(p0->num<=p1->num) { if(head==p1) head=p0; else p2->next=p0; p0->next=p1; } else {p1->next=p0;p0->next=NULL;} } for(p=head;p!=NULL;p=p->next) printf("%d: %d\n",p->num,p->d); return(head); } struct data * del(struct data *head) { struct data *p1,*p2; int num; printf("输入删除位置:"); scanf("%d",&num); if(head==NULL) {printf("链表空!\n");goto end;} p1=head; while(p1->num!=num&&p1->next!=NULL) {p2=p1;p1=p1->next;} if(p1->num==num) { if(p1==head) head=p1->next; else p2->next=p1->next; } else printf("没有发现%d!\n",num); for(p=head;p!=NULL;p=p->next) printf("%d: %d\n",p->num,p->d); end:return(head); }