单链表实验报告
计算机与信息技术学院综合性、设计性实验报告
专业:网络工程 年级/班级:大二 2016—2017学年第一学期
课程名称
数据结构
指导教师
李四
学号姓名
16 p;
int j;
p=L->next;
j=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i) return ERROR;
e=p->data;
return OK;
}
//单链表的按值查找
算法步骤:
用指针p指首元结点。
从首元结点开始依次顺着链域next向下查找,只要指向当前结点的指针p不为空,并且p所指结点的数据域不等于给定值e,则循环执行以下操作:p指向下一个结点。
返回p。若查找成功,p此时即为结点的地址值,若查找失败,p的值即为NULL。
int LocateElem_L(LinkList L,ElemType e)
{
LinkList p;
int j;
p=L->next;
j=1;
while(p&&p->data!=e)
{
p=p->next;
j++;
}
if(p) return j;
else return 0;
}
//单链表的插入
算法步骤:
查找结点ai-1并由指针p指向该结点。
生成一个新结点*s。
将新结点*s的数据域置为e。
将新结点*s的指针域指向结点ai。
将结点*p的指针域指向新结点*s。
Status ListInsert_L(LinkList &L,int i,ElemType e)
{
LinkList p=L,s;
int j=0;
while(p&&(j<i-1))
{
p=p->next;
++j;
}
if(!p||j>i-1)
{
return ERROR;
}
s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
//单链表的删除
查找结点ai-1并由指针p指向该结点。
临时保存待删除结点ai的地址在q中,以备释放。
将结点*p的指针域指向ai的直接后继结点。
释放结点ai的空间。
Status ListDelete_L(LinkList &L,int i)
{
LinkList p=L,q;
int j=0;
while((p->next)&&(j<i-1))
{
p=p->next;
++j;
}
if((!p->next)||(j>i-1))
{
return ERROR;
}
q=p->next;
p->next=q->next;
delete q;
return OK;
}
//单链表的输出
算法步骤:
将指针p指向L的next域。
输出p指针的数据。
将指针p后移。
循环第2,3步,直到p指针为空(NULL)。
void ListPrint_L(LinkList L)
{
LinkList p;
p=L->next;
do
{
printf("%5d",p->data);
p=p->next;
}while(p);
}
void main()
{
int i,n,e;
LinkList L;
if(InitList_L(L));
printf("单链表创建成功!\n");
printf("请输入您要输入的数据个数n:\n");
scanf("%d",&n);
printf("请输入您要输入的数据:\n");
for(i=1;i<=n;i++)
{
scanf("%d",&e);
ListInsert_L(L,i,e);
}
printf("当前单链表的内容为:\n");
ListPrint_L(L);
printf("\n");
printf("请输入您要插入的数据e及其位置i,使用空格键隔开:\n");
scanf("%d %d",&e,&i);
if(ListInsert_L(L,i,e))
{
printf("当前单链表的内容为:\n");
ListPrint_L(L);
}
else
{
printf("i值越界!\n");
}
printf("\n");
printf
单链表实验报告 来自淘豆网m.daumloan.com转载请标明出处.