单链表操作.docx

上传人:b****6 文档编号:6039750 上传时间:2023-01-03 格式:DOCX 页数:7 大小:15.38KB
下载 相关 举报
单链表操作.docx_第1页
第1页 / 共7页
单链表操作.docx_第2页
第2页 / 共7页
单链表操作.docx_第3页
第3页 / 共7页
单链表操作.docx_第4页
第4页 / 共7页
单链表操作.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

单链表操作.docx

《单链表操作.docx》由会员分享,可在线阅读,更多相关《单链表操作.docx(7页珍藏版)》请在冰豆网上搜索。

单链表操作.docx

单链表操作

一、目的和要求

1.熟悉并掌握单链表的逻辑结构定义、特点。

2.熟悉并掌握单链表描述方法。

3.熟悉并掌握单链表的基本操作,包括单链表的建立,判别表是否为空,求表长,插入与删除数据元素,查找数据元素等。

二、实验内容(以学生成绩信息表为例)

1、LinkListInitList()//生成一个带有头节点的空单链

2、LinkListCreat(LinkListM,inti)//链表初始化

3、PrintLNode(LinkListM)//输出链表

4、intpankong(LinkListM)//判断链表是否为空

5、intLENGTH(LinkListM)//求链表的长度

6、LinkListInsertNode(LinkListM,intj)//在链表中插入一个节点

7、intDeleteLNode(LinkListM,into)//删除链表中的某个节点

8、searchLNode(LinkListM,inth)//查找某个同学的成绩

三、源程序

#include

#include

typedefstruct

{

intchengji[3];

intnum;

}students;

typedefstructNode

{

studentsS;

structNode*next;

}LNode,*LinkList;

LinkListInitList()//生成一个带有头节点的空单链表

{

LinkListM;

M=(LNode*)malloc(sizeof(LNode));

M->next=NULL;

returnM;

}

LinkListCreat(LinkListM,inti)//链表初始化

{

intj,l;

LNode*N,*P;

P=M;

for(j=0;j

{N=(LNode*)malloc(sizeof(LNode));

N->next=NULL;

printf("输入第%d个学生的学号:

",j+1);

scanf("%d",&N->S.num);

printf("输入第%d个学生的成绩:

",j+1);

for(l=0;l<3;l++)

scanf("%d",&N->S.chengji[l]);

P->next=N;

P=N;

}

returnM;

}

PrintLNode(LinkListM)//输出链表

{

intj;

LNode*P;

P=M;

printf("全部学生的信息为:

\n");

while(P->next!

=NULL)

{

P=P->next;

printf("%d",P->S.num);

for(j=0;j<3;j++)

printf("%d",P->S.chengji[j]);

printf("\n");

}

}

intpankong(LinkListM)//判断链表是否为空

{

if(M->next==NULL)

{

printf("表为空!

\n");

return0;

}

else

{

printf("表非空!

\n");

return1;

}

}

intLENGTH(LinkListM)//求链表的长度

{

LNode*P;

intlength=0;

P=M;

while(P->next!

=NULL)

{

length++;

P=P->next;

}

returnlength;

}

LinkListInsertNode(LinkListM,intj)//在链表中插入一个节点

{

LNode*P,*Q=M,*N=M;

inti;

P=(LNode*)malloc(sizeof(LNode));

P->S.num=j;

printf("请分别输入您要插入的学生的成绩信息");

for(i=0;i<3;i++)

scanf("%d",&P->S.chengji[i]);

if(Q->next==NULL)

{

Q->next=P;

P->next=NULL;

}

else

{

while(Q->next->S.numS.num&&Q->next!

=NULL)

Q=Q->next;

if(Q->next!

=NULL)

{

P->next=Q->next;

Q->next=P;

}

if(Q->next==NULL)

{

Q->next->next=P;

P->next=NULL;

}

}

returnM;

}

intDeleteLNode(LinkListM,into)//删除链表中的某个节点

{

LNode*Q=M,*P;

if(Q->next==NULL)return0;

else

{

while(Q->next->S.num!

=o&&Q->next!

=NULL)

Q=Q->next;

if(Q->next->S.num==o)

{

P=Q->next;

Q->next=Q->next->next;

return1;

}

if(Q->next==NULL)

return2;

}

}

searchLNode(LinkListM,inth)//查找某个同学的成绩

{

LNode*P=M,*Q;intj;

Q=(LNode*)malloc(sizeof(LNode));

while(P->next->S.num!

=h&&P->next!

=NULL)

P=P->next;

if(P->next!

=NULL)

{

printf("您要查找的学号为%d的学生的成绩为:

",h);

for(j=0;j<3;j++)

printf("%d",P->next->S.chengji[j]);

printf("\n");

}

if(P->next==NULL)

printf("您查找的学生不存在!

");

}

 

voidmain()

{

LinkListM;

inti,length,k,j,o,l,h;

M=InitList();

printf("输入学生的个数:

");

scanf("%d",&i);

M=Creat(M,i);

k=pankong(M);

if(k)PrintLNode(M);

length=LENGTH(M);

printf("表长为:

%d\n",length);

printf("请输入您要插入的学生的学号:

");

scanf("%d",&j);

M=InsertNode(M,j);

length++;

PrintLNode(M);

printf("请输入您要删除的学生的学号:

");

scanf("%d",&o);

l=DeleteLNode(M,o);

if(l==0)printf("表为空,请确认!

");

if(l==1)

{

printf("删除成功!

");

PrintLNode(M);

}

if(l==2)printf("您要删除的学生不存在,请确认!

");

printf("请输入您要查找的学生的学号:

");

scanf("%d",&h);

searchLNode(M,h);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1