数据结构 实验二单链表的基本操作.docx
- 文档编号:10583324
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:13
- 大小:17.01KB
数据结构 实验二单链表的基本操作.docx
《数据结构 实验二单链表的基本操作.docx》由会员分享,可在线阅读,更多相关《数据结构 实验二单链表的基本操作.docx(13页珍藏版)》请在冰豆网上搜索。
数据结构实验二单链表的基本操作
实验二:
单链表的基本操作
一、【实验目的】
1、理解和掌握单链表的类型定义方法和结点生成方法。
2、掌握建立单链表和显示单链表元素的算法。
3、掌握单链表的查找、插入和删除算法
二、【实验内容】
1、建立一个整形数的单链表,手动输入10个数,并从屏幕显示单链表元素列表。
2、从键盘输入一个数,查找在以上创建的单链表中是否存在该数;如果存在,显示它的位置;如果不存在,给出相应提示。
3、删除上述单链表中指定位置的元素。
以下是程序部分代码,请调试并补充使之正确运行:
1.LinList.h
typedefstructNode
{
DataTypedata;
structNode*next;
}SLNode;
voidListInitiate(SLNode**head)/*初始化*/
{
/*如果有内存空间,申请头结点空间并使头指针head指向头结点*/
if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit
(1);
(*head)->next=NULL;/*置链尾标记NULL*/
}
intListLength(SLNode*head)
{
SLNode*p=head;/*p指向首元结点*/
intsize=0;/*size初始为0*/
while(p->next!
=NULL)/*循环计数*/
{
p=p->next;
size++;
}
returnsize;
}
intListInsert(SLNode*head,inti,DataTypex)
/*在带头结点的单链表head的数据元素ai(0≤i≤size)结点前*/
/*插入一个存放数据元素x的结点*/
{
SLNode*p,*q;
intj;
p=head;/*p指向首元结点*/
j=-1;/*j初始为-1*/
while(p->next!
=NULL&&j /*最终让指针p指向数据元素ai-1结点*/ { p=p->next; j++; } if(j! =i-1) { printf("插入位置参数错! "); return0; } /*生成新结点由指针q指示*/ if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit (1); q->data=x; q->next=p->next;/*给指针q->next赋值*/ p->next=q;/*给指针p->next重新赋值*/ return1; } intListDelete(SLNode*head,inti,DataType*x) /*删除带头结点的单链表head的数据元素ai(0≤i≤size-1)结点*/ /*删除结点的数据元素域值由x带回。 删除成功时返回1;失败返回0*/ { SLNode*p,*s; intj; p=head;/*p指向首元结点*/ j=-1;/*j初始为-1*/ while(p->next! =NULL&&p->next->next! =NULL&&j /*最终让指针p指向数据元素ai-1结点*/ { p=p->next; j++; } if(j! =i-1) { printf("插入位置参数错! "); return0; } s=p->next;/*指针s指向数据元素ai结点*/ *x=s->data;/*把指针s所指结点的数据元素域值赋予x*/ p->next=s->next;/*把数据元素ai结点从单链表中删除指*/ free(s);/*释放指针s所指结点的内存空间*/ return1; } intListGet(SLNode*head,inti,DataType*x) /*取数据元素ai和删除函数类同,只是不删除数据元素ai结点*/ { SLNode*p; intj; p=head; j=-1; while(p->next! =NULL&&j { p=p->next;j++; } if(j! =i) { printf("取元素位置参数错! "); return0; } *x=p->data; return1; } voidDestroy(SLNode**head) { SLNode*p,*p1; p=*head; while(p! =NULL) { p1=p; p=p->next; free(p1); } *head=NULL; } 2.main程序 #include #include #include #include"LinList.h"/*包含线性表文件*/ voidmain(void) { SLNode*head; inti,x; ListInitiate(&head);/*初始化*/ for(i=0;i<10;i++) { if(ListInsert(head,i,i+1)==0)/*插入10个数据元素*/ { printf("错误! \n"); return; } } } 三、【实验源代码】 1.执行代码: #include #include #include #include"LinList.h" voidmain(void) { SLNode*head; inti,x,t; ListInitiate(&head); printf("请输入10个数"); for(i=0;i<10;i++) { scanf("%d",&t); if(ListInsert(head,i,t)==0) { printf("错误! \n"); return; } } printf("请输入要查找的数字.\n"); scanf("%d",&t); ListFind(head,t); printf("请输入要删除的数字.\n"); scanf("%d",&t); if(ListDelete(head,&t)==1) printf("删除成功! \n"); else printf("错误! \n"); ListOutput(head); } 2.头文件 typedefstructNode { intdata; structNode*next; }SLNode; voidListInitiate(SLNode**head)/*初始化*/ { /*如果有内存空间,申请头结点空间并使头指针head指向头结点*/ if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit (1); (*head)->next=NULL;/*置链尾标记NULL*/ } intListLength(SLNode*head) { SLNode*p=head;/*p指向首元结点*/ intsize=0;/*size初始为0*/ while(p->next! =NULL)/*循环计数*/ { p=p->next; size++; } returnsize; } intListInsert(SLNode*head,inti,intx) /*在带头结点的单链表head的数据元素ai(0≤i≤size)结点前*/ /*插入一个存放数据元素x的结点*/ { SLNode*p,*q; intj; p=head;/*p指向首元结点*/ j=-1;/*j初始为-1*/ while(p->next! =NULL&&j /*最终让指针p指向数据元素ai-1结点*/ { p=p->next; j++; } if(j! =i-1) { printf("插入位置参数错! "); return0; } /*生成新结点由指针q指示*/ if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit (1); q->data=x; q->next=p->next;/*给指针q->next赋值*/ p->next=q;/*给指针p->next重新赋值*/ return1; } intListDelete(SLNode*head,int*x) /*删除带头结点的单链表head的数据元素ai(0≤i≤size-1)结点*/ /*删除结点的数据元素域值由x带回。 删除成功时返回1;失败返回0*/ { SLNode*p,*s; intj; p=head;/*p指向首元结点*/ j=-1;/*j初始为-1*/ while(p->next! =NULL&&p->next->next! =NULL&&p->next->data! =*x) /*最终让指针p指向数据元素ai-1结点*/ { p=p->next; j++; } //if(j! =i-1) //{ //printf("插入位置参数错! "); //return0; //} s=p->next;/*指针s指向数据元素ai结点*/ *x=s->data;/*把指针s所指结点的数据元素域值赋予x*/ p->next=s->next;/*把数据元素ai结点从单链表中删除指*/ free(s);/*释放指针s所指结点的内存空间*/ return1; } intListGet(SLNode*head,inti,int*x) /*取数据元素ai和删除函数类同,只是不删除数据元素ai结点*/ { SLNode*p; intj; p=head; j=-1; while(p->next! =NULL&&j { p=p->next;j++; } if(j! =i) { printf("取元素位置参数错! "); return0; } *x=p->data; return1; } voidDestroy(SLNode**head) { SLNode*p,*p1; p=*head; while(p! =NULL) { p1=p; p=p->next; free(p1); } *head=NULL; } voidListFind(SLNode*head,intt) { SLNode*p=head;/*p指向首元结点*/ ints=0;/*size初始为0*/ while(p->next! =NULL&&p->data! =t)/*循环计数*/ { p=p->next; s++; } if(p->next==NULL) { printf("不存在该数字.\n"); } else printf("数字%d存在的位置是: %d.\n",t,s); } voidListOutput(SLNode*p) { do { p=p->next; printf("%d",p->data); }while(p->next! =NULL); } 四、【实验结果】 五、【实验心得】
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验二单链表的基本操作 实验 二单链表 基本 操作