《数据结构》实验报告
实验序号 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;
青果云香港CN2_GIA主机测评青果云香港多线BGP网络,接入电信CN2 GIA等优质链路,测试IP:45.251.136.1青果网络QG.NET是一家高效多云管理服务商,拥有工信部颁发的全网云计算/CDN/IDC/ISP/IP-VPN等多项资质,是CNNIC/APNIC联盟的成员之一。青果云香港CN2_GIA主机性能分享下面和大家分享下。官方网站:点击进入CPU内存系统盘数据盘宽带ip价格购买地...
虎跃科技怎么样?虎跃科技(虎跃云)是一家成立于2017年的国内专业服务商,专业主营云服务器和独立服务器(物理机)高防机房有着高端华为T级清洗能力,目前产品地区有:山东,江苏,浙江等多地区云服务器和独立服务器,今天虎跃云给大家带来了优惠活动,为了更好的促销,枣庄高防BGP服务器最高配置16核32G仅需550元/月,有需要的小伙伴可以来看看哦!产品可以支持24H无条件退款(活动产品退款请以活动规则为准...
妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款,超过2天不退款 物...