结点数据结构实验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;

易探云香港vps主机价格多少钱?香港云服务器主机租用价格

易探云香港vps主机价格多少钱?香港vps主机租用费用大体上是由配置决定的,我们选择香港vps主机租用最大的优势是免备案vps。但是,每家服务商的机房、配置、定价也不同。我们以最基础配置为标准,综合比对各大香港vps主机供应商的价格,即可选到高性能、价格适中的香港vps主机。通常1核CPU、1G内存、2Mbps独享带宽,价格在30元-120元/月。不过,易探云香港vps主机推出四个机房的优惠活动,...

标准互联(450元)襄阳电信100G防御服务器 10M独立带宽

目前在标准互联这边有两台香港云服务器产品,这不看到有通知到期提醒才关注到。平时我还是很少去登录这个服务商的,这个服务商最近一年的促销信息比较少,这个和他们的运营策略有关系。已经从开始的倾向低价和个人用户云服务器市场,开始转型到中高端个人和企业用户的独立服务器。在这篇文章中,有看到标准互联有推出襄阳电信高防服务器100GB防御。有三款促销方案我们有需要可以看看。我们看看几款方案配置。型号内存硬盘IP...

妮妮云,美国cera CN2线路,VPS享3折优惠

近期联通CUVIP的线路(AS4837线路)非常火热,妮妮云也推出了这类线路的套餐以及优惠,目前到国内优质线路排行大致如下:电信CN2 GIA>联通AS9929>联通AS4837>电信CN2 GT>普通线路,AS4837线路比起前两的优势就是带宽比较大,相对便宜一些,所以大家才能看到这个线路的带宽都非常高。妮妮云互联目前云服务器开放抽奖活动,每天开通前10台享3折优惠,另外...

99xxx为你推荐
支付宝查询余额支付宝钱包怎么查余额?唱吧电脑版官方下载电脑怎么安装唱吧,要能用的,请教教程,谢谢iphone越狱后怎么恢复苹果手机越狱后怎么恢复腾讯文章腾讯罗剑楠是何许人也?qq怎么发邮件怎么发送QQ邮件奇虎论坛360有论坛中心?安装迅雷看看播放器怎样安装迅雷看看播放器mate8价格华为mate8 128g售价多少钱iphone6上市时间苹果6什么时候出?多少钱安全漏洞web安全漏洞有哪些
域名备案网站 博客主机 香港主机 163网 softbank官网 双11抢红包攻略 ev证书 me空间社区 服务器是干什么的 绍兴电信 双线asp空间 网通服务器 国外在线代理服务器 秒杀品 个人免费邮箱 免费网络空间 中美互联网论坛 美国vpn代理 symantec pptpvpn 更多