实验四 单链表的基本操作.docx
- 文档编号:2443371
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:12
- 大小:28.38KB
实验四 单链表的基本操作.docx
《实验四 单链表的基本操作.docx》由会员分享,可在线阅读,更多相关《实验四 单链表的基本操作.docx(12页珍藏版)》请在冰豆网上搜索。
实验四单链表的基本操作
实验四:
单链表的基本操作
一、【实验目的】
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; } 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; } /*编写一个删除函数*/ intListDelete(SLNode*head,inti,DataType*x) /*其中head为链表头指针,i为要删除的结点,x为被删除的数*/ /*编写一个查找函数*/ intListFind(SLNode*head,DataTypex) /*head为头指针,x为要查找的数*/ 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 typedefintDataType; #include"LinList.h"/*包含线性表文件*/ voidmain(void) { SLNode*head; inti,k,x; ListInitiate(&head);/*初始化*/ printf("请输入十个数\n"); for(i=0;i<10;i++) {scanf("%d",&x); if(ListInsert(head,i,x)==0)/*插入10个数据元素*/ { printf("错误! \n"); return; } } printf("\n请输入你要找的数\n"); scanf("%d",&x); k=ListFind(head,x);/*查找x*/ if(k==0) printf("数据没有找到\n"); else printf("%d\n",k); printf("\n请输入你要删除的位置\n"); scanf("%i",&d); if(ListDelete(head,i,&x)==0)/*删除x*/ { printf("wrong\n"); } for(i=0;i { if(ListGet(head,i,&x)==0) { printf("错误! \n"); return; } elseprintf("%d",x); } } 三、【实验源代码】 H4.h #ifndefWQJ 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; } 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; } /*编写一个删除函数*/ intListDelete(SLNode*head,inti,DataType*x) { SLNode*p,*s; intj; p=head; j=-1; while(p->next! =NULL&&p->next! =NULL&&j { p=p->next; j++; } if(j! =i-1) { printf("删除位置参数错! "); return0; } s=p->next; *x=s->data; p->next=p->next->next; free(s); return1; } /*其中head为链表头指针,i为要删除的结点,x为被删除的数*/ /*编写一个查找函数*/ intListFind(SLNode*head,DataTypex) /*head为头指针,x为要查找的数*/ { SLNode*p=head; inti=0; while(p->next! =NULL) { if(p->data==x) { returni; } p=p->next; i++; } if(p->data==x) { returni; } return0; } voidDestroy(SLNode**head) { SLNode*p,*p1; p=*head; while(p! =NULL) { p1=p; p=p->next; free(p1); } *head=NULL; } #endif #include #include
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验四 单链表的基本操作 实验 单链表 基本 操作