实验一、单链表的插入和删除
一、 目的
了解和掌握线性表的逻辑结构和链式存储结构掌握单链表的基本算法及相关的时间性能分析。
一、要求
建立一个数据域定义为字符串的单链表在链表中不允许有重复的字符串根据输入的字符串先找到相应的结点后删除之。
三、程序源代码
#i nclude"stdio.h"
#i nclude"stri ng.h"
#i nclude"stdl ib.h"
#in clude"ctype.h"typedef struct node //定义结点
{char data[10]; //结点的数据域为字符串struct node*n ext; //结点的指针域
}ListNode;typedef ListNode*Lin kList; // 自定义LinkList单链表类型
Lin kList CreatListR1(); //函数用尾插入法建立带头结点的单链表
数据结构实验报告
ListNode*LocateNode(); //函数按值查找结点void DeleteList(); //函数删除指定值的结点void pr in tl ist(); //函数打印链表中的所有值void DeleteAl l(); //函数删除所有结点释放内存〃二=========主函数==============void mai n()
{charch[10], nu m[10];
Lin kList head;head=CreatListR1(); //用尾插入法建立单链表返回头指针prin tl ist(head); //遍历链表输出其值printf(”Delete node(y/n):"); 〃输入y”或“去选择是否删除结点sca nf("%s", nu m);if(strcmp(nu m,"y")==0 | |strcmp(nu m,"Y")==0){prin tf("Please in put Delete_data:");sca nf("%s",ch); //输入要删除的字符串
DeleteList(head,ch);pr in tl ist(head);
}
DeleteAl l(head); //删除所有结点释放内存}
2
数据结构实验报告
//==========用尾插入法建立带头结点的单链表
3
数据结构实验报告
LinkList CreatListRI(void)
{charch[10];
LinkList head=(LinkList)mal loc(sizeof(ListNode)); //生成头结点ListNode*s,*r,*pp;r=head;r->next二NULL;prin tf("I nput#to end"); //输入#”代表输入结束prin tf("Please in put Node_data:");sca nf("%s",ch); //输入各结点的字符串whi le(strcmp(ch,"#")!=O) {pp=LocateNode(head,ch); //按值查找结点返回结点指针if(pp==NULL) { //没有重复的字符串插入到链表中s=(ListNode*)mal loc(sizeof(ListNode));strcpy(s->data,ch);r->n ext=s;r=s;r->n ext=NULL;
}prin tf("I nput#to end");prin tf("Please in put Node_data:");
4
数据结构实验报告
sea nf("%s",ch);
}return head; //返回头指针
}
〃二=========按值查找结点找到则返回该结点的位置否则返
回NULL二=========
ListNode*LocateNode(L in kList head,char*key)
{
ListNode*p=head->next; //从开始结点比较whi le(p&&strcmp(p->data,key)!=O ) //直到p为NULL或p->data为key止p=p->n ext; //扫描下一个结点return p; //若p=NULL则查找失败否则p指向找到的值key
的结点
}
//========== 删除带头结点的单链表中的指定结点=======vo i dDeleteList(Li nkList head,char*key)
{
ListNode*p,*r,*q=head;p=LocateNode(head,key); //按key值查找结点的if(p==NULL) { //若没有找到结点退出prin tf("positi on error");
5
}whi le(q->next!二p) 〃p为要删除的结点 q为p的前结点q二q->n ext;r二q->n ext;q->n ext=r->n ext;fr e e(r); //释放结点
}
〃二二=========打印链表=======void pr in tl ist(L in kList head)
{
ListNode*p=head->next; //从开始结点打印wh i l e(p){prin tf("%s, ”,p->data);p=p->n ext;
}prin tf("\n");
}
//========== 删除所有结点释放空间===========void DeleteAI I(LinkList head)
{
LipsrtiNnotdf(e"i*npp=uhtethaed, i*nr;sert no de:");
6
数据结构实验报告
whi le(p->next){ r=p->n ext; free(p);p=r
}fr e e(p);
}
运行结果
加的添加结点的代码:int In sert(ListNode*head) // the in sert fun cti on
{
ListNode*in ,*p,*q;int wh;in=(ListNode*)mal loc(sizeof(ListNode)); in->next二NULL; p=(ListNode
*)mal loc(sizeof(ListNode));p->next=NULL; q=(ListNode
7
数据结构实验报告
*)mal loc(sizeof(ListNode));q->next二NULL; if(! i n)retu rn 0;sca nf("%s", i n->data);printf("input the place where you want to insert you data:");sca nf("%d",&wh);for(p=head;wh>0;p=p->n ext,wh--);q=p->n ext;p->n ext=in;in->n ext=q;retu rn 1 ;
}
运行结果:
prin tf("i nput the in sert node:");
8
数据结构实验报告
最后提示为OK添加成功
实验心得这个实验中 主要修改的是ch和num把它们由指针改成数组因为不改的话在后面 delect函数中会出现没有地址的情况找不到地址就不能执行功能 然后把locate函数的判断语句改一下避免矛盾的出现。
9
VirMach,成立于2014年的美国IDC商家,知名的低价便宜VPS销售商,支持支付宝、微信、PayPal等方式付款购买,主打美国、欧洲暑假中心产品,拥有包括洛杉矶、西雅图、圣何塞、凤凰城在内的11个数据中心可以选择,可以自由搭配1Gbps、2Gbps、10Gbps带宽端口,有Voxility DDoS高防IP可以选择(500Gbps以上的防御能力),并且支持在控制面板付费切换机房和更换IP(带...
香港大带宽服务器香港大带宽云服务器目前市场上可以选择的商家十分少,这次给大家推荐的是我们的老便宜提速啦的香港大带宽云服务器,默认通用BGP线路(即CN2+BGP)是由三网直连线路 中国电信骨干网以及HGC、NTT、PCCW等国际线路混合而成的高品质带宽(精品带宽)线路,可有效覆盖全球200多个国家和地区。(适用于绝大部分应用场景,适合国内外访客访问,域名无需备案)提速啦官网链接:点击进入香港Cer...
官方网站:点击访问CDN客服QQ:123008公司名:贵州青辞赋文化传媒有限公司域名和IP被墙封了怎么办?用cloudsecre.com网站被攻击了怎么办?用cloudsecre.com问:黑客为什么要找网站来攻击?答:黑客需要找肉鸡。问:什么是肉鸡?答:被控的服务器和电脑主机就是肉鸡。问:肉鸡有什么作用?答:肉鸡的作用非常多,可以用来干违法的事情,通常的行为有:VPN拨号,流量P2P,攻击傀儡,...