结点[分享]数据结构实验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:");s canf("%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==NUL L)

{ //若没有找到结点退出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(sizeof(ListNode)); //生成头结点ListNode *s,*r;r=he ad;r->ne xt=NULL;printf("Input#to end "); //输入"#"代表输入结束printf("Please input Node_data:");s canf("%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=he ad;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"

#include"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); //函数按值查找结点

妮妮云香港CTG云服务器1核 1G 3M19元/月

香港ctg云服务器香港ctg云服务器官网链接 点击进入妮妮云官网优惠活动 香港CTG云服务器地区CPU内存硬盘带宽IP价格购买地址香港1核1G20G3M5个19元/月点击购买香港2核2G30G5M10个40元/月点击购买香港2核2G40G5M20个450元/月点击购买香港4核4G50G6M30个80元/月点击购买香...

GigsGigsCloud 春节优惠2022 指定云服务器VPS主机85折循环优惠码

GigsGigsCloud商家在之前介绍的还是比较多的,因为之前我一直有几台机器在使用,只是最近几年网站都陆续转型删除掉不少的网站和闲置域名,包括今年也都减少网站开始转型自媒体方向。GigsGigsCloud 商家产品还是比较有特色的,有提供香港、新加坡等亚洲机房的云服务器、VPS和独立服务器等。第一、新春优惠活动优惠码:CNY2022-15OFF截止到正月初二,我们可以使用上述优惠码在购买指定G...

Sharktech($49/月),10G端口 32GB内存,鲨鱼机房新用户赠送$50

Sharktech 鲨鱼机房商家我们是不是算比较熟悉的,因为有很多的服务商渠道的高防服务器都是拿他们家的机器然后部署高防VPS主机的,不过这几年Sharktech商家有自己直接销售云服务器产品,比如看到有新增公有云主机有促销活动,一般有人可能买回去自己搭建虚拟主机拆分销售的,有的也是自用的。有看到不少网友在分享到鲨鱼机房商家促销活动期间,有赠送开通公有云主机$50,可以购买最低配置的,$49/月的...

99xxx为你推荐
雅虎社区福建晋江社区是什么?flash导航条谁来帮我看看这样的flash导航条 下面的页面该怎么设计二叉树遍历怎么正确理解二叉树的遍历1433端口如何打开SQL1433端口镜像文件是什么镜像文件是什么意思?网店推广网站可以介绍几个可以做店铺推广的网站吗?怎么点亮qq空间图标怎样点亮qq空间的图标人人逛街过节了,这儿可真热闹写一段话分词技术什么是seo分词技术qq等级表谁能告诉我QQ等级列表?
美国免费主机 网站空间域名 winscp 主机评测 紫田 国外bt debian6 好看的桌面背景图片 php免费空间 蜗牛魔方 qq云端 国外免费asp空间 流媒体加速 万网空间购买 电信托管 创建邮箱 双线asp空间 smtp虚拟服务器 lamp的音标 97rb 更多