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

10gbiz($2.36/月),香港/洛杉矶CN2 GIA线路VPS,香港/日本独立服务器

10gbiz发布了9月优惠方案,针对VPS、独立服务器、站群服务器、高防服务器等均提供了一系列优惠方面,其中香港/洛杉矶CN2 GIA线路VPS主机4折优惠继续,优惠后最低每月仅2.36美元起;日本/香港独立服务器提供特价款首月1.5折27.43美元起;站群/G口服务器首月半价,高防服务器永久8.5折等。这是一家成立于2020年的主机商,提供包括独立服务器租用和VPS主机等产品,数据中心包括美国洛...

totyun:香港cn2 vps,5折优惠,$6/月,10Mbps带宽,不限流量,2G内存/2核/20g+50g

totyun,新公司,主要运作香港vps、日本vps业务,接入cn2网络,不限制流量!VPS基于KVM虚拟,采用系统盘和数据盘分离,从4G内存开始支持Windows系统...大家注意下,网络分“Premium China”、“Global”,由于站长尚未测试,所以也还不清楚情况,有喜欢吃螃蟹的尝试过不妨告诉下站长。官方网站:https://totyun.com一次性5折优惠码:X4QTYVNB3P...

随风云-内蒙古三线BGP 2-2 5M 25/月 ,香港CN2 25/月 ,美国CERA 25/月 所有云服务器均支持5天无理由退款

公司成立于2021年,专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,面向全球客户提供基于云计算的IT解决方案与客户服务,拥有丰富的国内BGP、三线高防、香港等优质的IDC资源。公司一直秉承”以人为本、客户为尊、永续创新”的价值观,坚持”以微笑收获友善, 以尊重收获理解,以责任收获支持,以谦卑收获成长”的行为观向客户提供全面优质的互...

99xxx为你推荐
iphone5解锁iphone5怎么解锁简体翻译成繁体简体中文转换成繁体怎么转换?显卡温度多少正常电脑显卡温度多少正常?唱吧电脑版官方下载唱吧有电脑版的么? 在哪里下载啊?网店推广网站什么平台适合做淘宝店铺推广ejb开发EJB是什么?如何快速收录如何让百度快速收录网络广告投放网络广告投放有哪些技巧?分词技术百度的中文分词原理是什么?与IK分词有区别吗?srv记录SRV记录的定义
短域名 国际域名抢注 美国vps推荐 godaddy优惠码 suspended 免费名片模板 回程路由 12306抢票助手 商家促销 本网站在美国维护 个人域名 免空 韩国名字大全 phpmyadmin配置 爱奇艺vip免费领取 个人免费邮箱 可外链的相册 测试网速命令 国外代理服务器 乐视会员免费领取 更多