结点数据结构实验3_99XXX

99xxx  时间:2021-02-22  阅读:()

《数据结构》实验报告

实验序号 3 实验项目名称链式表的操作

附源程序清单

1、

#include"stdio.h"

#inclu de"string.h"

#include"stdlib.h"

#in clu de"ctype.h"typedef struct node //定义结点

{char data[10] ; //结点的数据域为字符串struct node *next; //结点的指针域char*L;

}Lis tNode;type de f ListNode *Link List; // 自定义Link Lis t单链表类型

LinkList CreatListR1(); //函数用尾插入法建立带头结点的单链表LinkList CreatListR(); //函数用头插入法建立带头结点的单链表

LinkList LocateNode(LinkList head,char*key); //函数按值查找结点void DeleteList(LinkList head,char*key); //函数删除指定值的结点LinkList LocateBreforeNode(LinkList head, char *key); //函数查找指定数值的前驱结点void DeleteBreforeNode(LinkList head,char *key); //函数删除指定数值的前驱结点void printlist(LinkList head); //函数打印链表中的所有值void DeleteAll(LinkList head); //函数删除所有结点释放内存//==========主函数==============void main()

{char*ch,*num;num=new char;ch=new char[10] ;

LinkList he ad;

LinkList pm;

head=CreatListR1(); //用尾插入法建立单链表返回头指针printlist(he ad); //遍历链表输出其值printf("Delete node(y/n):"); //输入"y"或"n"去选择是否删除结点scanf("%s",num);if(strcmp(num,"y")==0| | strcmp(num,"Y")==0)

{printf("Please input Delete_data:");scanf("%s",ch); //输入要删除的字符串

DeleteList(head,ch);printlist(he ad);

}printf("输入要查找的数值");s canf("%s",ch);pm=LocateNode(head, ch);printf("%s\n",pm->data);printf("输入要删除的数值的前驱结点");s canf("%s",ch);

DeleteBreforeNode(head,ch);printlist(he ad);printf("对单循环链表进行逆序输出\n");head=CreatListR(); //用头插入法建立单链表返回头指针printlist(he ad);

//DeleteAll(he ad); //删除所有结点释放内存

}

//==========查找的指定数值的前驱结点=======

LinkList LocateBreforeNode(LinkList head, char*key)

{

ListNode *p=head->next; //从开始结点比较

Lis tNode *t ; //p的上一个节点指针while(p&&strcmp(p->data,key)!=0) //直到p为NULL或p->data为key止

{t=p; //记录上一个节点的指针p=p->next; //扫描下一个结点

}return t; //若p=NULL则查找失败否则p指向找到的值为key的结点}

//==========删除的指定数值的前驱结点=======void DeleteBreforeNode(LinkList head,char*key)

{

ListNode *pp,*r,*q=he ad;pp=LocateBre foreNode(he ad,k ey); //按key值查找结点的if(pp==NULL)

{ //若没有找到结点退出printf("position error");

exit(0);

}while(q->ne xt!=pp) //p为要删除的结点 q为p的前结点q=q->next;r=q->next;q->next=r->next;free(r); //释放结点

}

//==========用尾插入法建立带头结点的单链表===========LinkList CreatListR1(void)

{char*ch;ch=new char[10] ;

LinkList he ad=(LinkList)malloc(size of(ListNode)); //生成头结点ListNode *s,*r;r=he ad;r->ne xt=NULL;printf("Input#to end "); //输入"#"代表输入结束printf("Please input Node_data:");scanf("%s",ch); //输入各结点的字符串while(strcmp(ch,"#")!=0)

{s=(ListNode *)malloc(sizeof(ListNode));strcpy(s->data,ch);r->next=s;r=s;r->next=NULL;

//printf("Input#to end ");

//printf("Please input Node_data:");scanf("%s",ch);

}return head; //返回头指针

}

//==========用头插入法建立带头结点的单链表===========LinkList CreatListR(void)

{

LinkList he ad=(LinkList)malloc(size of(ListNode)); //生成头结点ListNode *s,*r;r=he ad;r->ne xt=NULL;printf("Input#to end "); //输入"#"代表输入结束printf("Please input cricle Node_data:");//输入各结点的字符串do//while(strcmp(s->data,"#")!=0)

{s=(LinkList)malloc(size of(ListNode));s canf("%s",s->data);s->ne xt=r->ne xt;r->ne xt=s;

}while(strcmp(s->data,"#")!=0);r->ne xt=r->ne xt->ne xt;return head; //返回头指针

}

//==========按值查找结点找到则返回该结点的位置否则返回NULL==========LinkList LocateNode(LinkList head,char*key)

{

ListNode *p=head->next; //从开始结点比较while(p&&strcmp(p->data,key)!=0) //直到p为NULL或p->data为key止p=p->next; //扫描下一个结点return p; //若p=NULL则查找失败否则p指向找到的值为key的结点}

//==========删除带头结点的单链表中的指定结点=======void DeleteList(LinkList head,char*key)

{

ListNode *p,*r,*q=head;p=LocateNode(head,key); //按key值查找结点的if(p==NULL)

{ //若没有找到结点退出printf("position error");exit(0);

}while(q->ne xt!=p) //p为要删除的结点 q为p的前结点q=q->next;r=q->next;q->next=r->next;free(r); //释放结点

}

//===========打印链表=======void printlist(LinkList head)

{

ListNode *p=head->next; //从开始结点打印while(p)

{printf("%s, ",p->data);p=p->next;

}

printf("\n");

}

//==========删除所有结点释放空间===========void DeleteAll(LinkList head)

{

ListNode *p=head,*r;while(p->ne xt)

{r=p->next;free(p);p=r;

}free(p);

}

1 .

#include"stdio.h"

#inclu de"string.h"

#include"stdlib.h"

#in clu de"ctype.h"typedef struct node //定义结点

{char data[10] ; //结点的数据域为字符串struct node *next; //结点的指针域char*L;

}Lis tNode;type de f ListNode *Link List; // 自定义Link Lis t单链表类型

LinkList CreatListR1(); //函数用尾插入法建立带头结点的单链表LinkList CreatListR(); //函数用头插入法建立带头结点的单链表

LinkList LocateNode(LinkList head,char*key); //函数按值查找结点void DeleteList(LinkList head,char*key); //函数删除指定值的结点LinkList LocateBreforeNode(LinkList head, char *key); //函数查找指定数值的前驱结点void DeleteBreforeNode(LinkList head,char *key); //函数删除指定数值的前驱结点void printlist(LinkList head); //函数打印链表中的所有值void DeleteAll(LinkList head); //函数删除所有结点释放内存//==========主函数==============void main()

{char*ch,*num;num=new char;ch=new char[10] ;

LinkList he ad;

LinkList pm;

傲游主机38.4元起,韩国CN2/荷兰VPS全场8折vps香港高防

傲游主机怎么样?傲游主机是一家成立于2010年的老牌国外VPS服务商,在澳大利亚及美国均注册公司,是由在澳洲留学的害羞哥、主机论坛知名版主组长等大佬创建,拥有多家海外直连线路机房资源,提供基于VPS主机和独立服务器租用等,其中VPS基于KVM或者XEN架构,可选机房包括中国香港、美国洛杉矶、韩国、日本、德国、荷兰等,均为CN2或者国内直连优秀线路。傲游主机提供8折优惠码:haixiuge,适用于全...

ShineServers(5美元/月)荷兰VPS、阿联酋VPS首月五折/1核1G/50GB硬盘/3TB流量/1Gbps带宽

优惠码50SSDOFF 首月5折50WHTSSD 年付5折15OFF 85折优惠,可循环使用荷兰VPSCPU内存SSD带宽IPv4价格购买1核1G50G1Gbps/3TB1个$ 9.10/月链接2核2G80G1Gbps/5TB1个$ 12.70/月链接2核3G100G1Gbps/7TB1个$ 16.30/月链接3核4G150G1Gbps/10TB1个$ 18.10/月链接阿联酋VPSCPU内存SS...

无忧云( 9.9元/首月),河南洛阳BGP 2核 2G,大连BGP线路 20G高防 ,

无忧云怎么样?无忧云服务器好不好?无忧云值不值得购买?无忧云,无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,自营有国内雅安高防、洛阳BGP企业线路、香港CN2线路、国外服务器产品等,非常适合需要稳定的线路的用户,如游戏、企业建站业务需求和各种负载较高的项目,同时还有自营的高性能、高配置的BGP线路高防物理...

99xxx为你推荐
唱吧电脑版官方下载唱吧有电脑版的么? 在哪里下载啊?蘑菇街美丽说蘑菇街、美丽说这类网站前期是怎么推广的?2012年正月十五农历2012年正月15早上9点多生的!命里缺什么!是什么命相二层交换机请教:二层交换机是干什么用的啊?电子商务网站模板网页制作模板微信怎么看聊天记录微信如何查找聊天记录qq等级表QQ等级天数表去鼠标加速度去鼠标加速到底有什么好处.......防钓鱼无线防钓鱼 什么意思office2007简体中文版到哪里下载正版的office2007~~
免费网站域名申请 汉邦高科域名注册 hostmaster 哈喽图床 免费smtp服务器 java虚拟主机 本网站在美国维护 元旦促销 河南移动邮件系统 七夕快乐英文 赞助 昆明蜗牛家 华为云服务登录 宏讯 丽萨 路由跟踪 广州虚拟主机 服务器论坛 锐速 SmartAXMT800 更多