单链表的基本操作实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖南第一师范学院信息科学与工程系实验报告
课程名称:数据结构与算法成绩评定:
实验项目名称:单链表的基本操作指导教师:
学生姓名:沈丽桃学号: 10403080118 专业班级: 10教育技术
实验项目类型:验证实验地点:科B305 实验时间: 2011 年 10 月20 日一、实验目的与要求:
实验目的:实现线性链表的创建、查找、插入、删除与输出。
基本原理:单链表的基本操作
二、实验环境:(硬件环境、软件环境)
1.硬件环境:奔ⅣPC。
2.软件环境:Windows XP 操作系统,TC2.0或VC++。
三、实验内容:(原理、操作步骤、程序代码等)
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
struct celltype
{
int element;
struct celltype*next;
};
typedef int position;
void main()
{
struct celltype*head,*p;
int x,choice;
void INSERT(int x,struct celltype*p);
void LOCATE(int x,struct celltype*p);
void DELETE(int x,struct celltype*p);
p=(struct celltype*)malloc(sizeof(struct celltype));
head=p;
p->element=0;
p->next=NULL;
printf(“Please option:1:Insert 2:Locate 3:Delete\n”);
printf(“Please choose:”);
scanf(“%d”,&choice);
switch(choice)
case 1:
printf(“Please input a node:”);
scanf(“%d”,&x);
p=head;
INSERT(x,p);
for(p=head;p!=NULL;p=p->next)
printf(“%d”,p->element);
printf(“\n”);
break;
case 2:
printf(“Please input the data you want to locate:”); scanf(“%d”,&x);
p=head;
LOCATE(x,p);
break;
case 3:
printf(“Please input the data you want to delete:”); scanf(“%d”,&x);
DELETE(x,p);
for(p=head;p!=NULL;p=p->next)
printf(“%d”,p->next);
printf(“\n”);
break;
}
void INSERT(int x,struct celltype*p)
{
struct celltype*t,*q;
q=(struct celltype*)malloc(sizeof(struct celltype)); q->next=x;
while((x>p->element)&&(p!=NULL))
{
t=p;
p=p->next;
}
if((x>p->element)&&(p->next!=NULL))
{
p->next=q;
q->next=NULL;
}
else
{
q->next=p;
t->next=q;
}
}
void LOCATE(int x,struct celltype*p)
{
while(p->next!=NULL)
if(p->next->element==x)
printf(“the number %d is in %d\n”,x,p);
else printf(“the number not exist!\n”);
}
void DELETE(int x,struct celltype*p)
{
while((p->element!=x)&&(p->next!=NULL))
{
t=p;
p=p->next;
}
if(p->element==x)
t->next=p->next
}
error C2018:unknown character ’Oxal’
error C2065:’Please’:undeclared identifier
error C4024:’printf’:different types for formal and actual parameter 1
error C4047:’function’:’const*differs in levers of indirection from ’int’error C2146:syntaxerror:missing’)’before identifier’option’
error C2017:illegal escape sequence
error C2059:syntax error:’)’
error C2143:syntax error:missing’)’before’%’
出现了很多错误,主要是因为printf里的一对双引号不是英文状态下的。
将双引号改好后,错误消失,输入时应注意细节,最好直接在编译环境下输程序
error C2043:illegal break
error C2043:illegal case
error C2198:’scanf’:too few actual parameters
这里是由于每一个case间应有缩进,或者用大括号括起来。
error C2065:’t’:undeclared identifier
warning C4047:’=’:’struct celltype*’differs in levers of indirection
这个错误是p->next=x,应改为p->element=x
error C2223:left of’->next’must point to struct/union
这里是由于t没有定义,还有最后一个语句后没有分号。
四、实验体会
注意细节,像拼写错误就该避免,要注意所有符号必须是英文状态下的。
所有变量必须定义清楚,在用switch语句时,注意每个case的写法,必要时用break跳出循环。
最好是用do来引导,注意括号的配对。
还有查插删操作的基本思想和程序思路,掌握量表操作的实质,灵活运用指针。
struct celltype*p不对,*前应空格。
还要多练习写程序,从C语言的基础开始,每一个知识都要掌握。