当前位置: 首页 > news >正文

1.4.课设实验-数据结构-单链表-文教文化用品品牌2.0

一.题目:

题目见"1.2.课设实验-数据结构-单链表-文教文化用品品牌"的题目。

二.参考代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxSize 10 //定义顺序表最大长度static int result; //字符串比较结果
static int i; //循环初始值 
static bool flag; //记录结果为真/假
static int ListLen;//记录单链表长度,全局要用,一开始长度为0 //品牌型号
typedef struct
{char model[10];
}BModel; //品牌信息 
typedef struct
{//品牌编号 char BH[5];//品牌名char BN[15];  //该品牌被查找的次数unsigned int num;
}Goods;//存储文教文化用品(商品)的顺序表
typedef struct
{//品牌 Goods *g;//品牌型号数组 BModel bm[MaxSize];//顺序表当前长度,多一个型号则长度加一 int length; 
}BrandSqList; //文教文化用品的品牌形成的单链表
typedef struct LNode
{//指向下一个品牌的指针,类型要用struct LNode而不是LNode,原因和下一行同理 struct LNode *next;//此时不能用*LinkList,因为此时还没有定义*LinkList,这个是结构体定义完才有的//文教文化用品的顺序表,一个结点是一个品牌顺序表 BrandSqList BList;  
}LNode,*LinkList;//前者强调结点,后者强调单链表(两者等价)//初始化单链表(带头结点) 
bool InitLinkList(LinkList &L) //注意加& 
{//1.分配头结点L = (LNode *)malloc(sizeof(LNode));//2.判断if(L==NULL){return false; //内存不足,分配失败 } else{//分配成功L->next = NULL; //头结点之后暂时还没有结点return true; }
} //初始化顺序表
bool InitBrandSqList(BrandSqList &inBList) //记得加&,因为初始化,值改变了 
{//1.为顺序表分配数组空间inBList.g = new Goods[MaxSize]; //new的是Goods,不是BrandSqList,因为分配给商品 //2.判断 if( inBList.g ) {//分配成功 inBList.length = 0; //一开始长度为0return true;}else{return false;//内存不足,分配失败  }
} //判断最终结果的函数 
void final(bool flag)
{if(flag) {printf("成功 \n");}else{printf("失败 \n");} 
}//顺序表内容赋值
void inputInBList(BrandSqList &inBList,int i) //需要&,因为顺序表值变了 
{printf("第%d个品牌: \n",i);//1.品牌编号printf("请输入品牌编号:");scanf("%s",inBList.g->BH);//2.品牌名printf("请输入品牌名:");scanf("%s",inBList.g->BN); //直接给字符数组录入即可//3.查找频次一开始为0inBList.g->num=0; 
} //添加品牌到单链表:在p结点之后插入下一个结点(顺序表)->该添加属于指定结点添加 
/* L每次是单链表的第一个元素即头结点,BrandSqList inBList是要插入的元素 */ 
//i为位序,如第一次插在第一个位置,再比如i为2代表插在第二个位置上,就要找到第一个位置插在他的后面   
bool InsertNextNode(LinkList &L,BrandSqList inBList,int i) //inBList不用加&,因为只是添加到单链表,值没变 
{//1.判断位序是否合法if(i<1){printf("--");return false; //位序必须是正整数 } //此时位序合法 //2.建立指针p指向当前扫描到的结点LNode *p;//3.设置变量记录p扫描到第几个结点int j=0;//一开始是头结点即为0 //4.L指向头结点,头结点是第0个元素(不存数据)p=L;//5.循环找到第i-1个结点 while(p!=NULL && j<i-1){p = p->next;j++;}//6.判断pif(p==NULL){return false; //说明i不合法 } //7.给新结点申请内存空间LNode *s = (LNode *)malloc(sizeof(LNode));//8.判断sif(s==NULL){return false; //内存不足,分配失败 } //9.把要添加的数据赋给空间ss->BList = inBList;//10.修改指针s->next = p->next;p->next = s;//11.结果 return true; 
} //插入品牌的函数(要输入顺序表内容)
bool InsertBrand(LinkList &L,int i) //要加&,因为单链表发生了改变 
{//1.创建顺序表-->不能只在主函数中开头创建一个,因为单链表里不止一个顺序表 BrandSqList inBList; //顺序表创建后要全局用 //2.初始化顺序表InitBrandSqList(inBList);//3.顺序表内容赋值inputInBList(inBList,i); //i也是编号 //4.插入品牌 flag=InsertNextNode(L,inBList,i);if(flag){printf("*该品牌添加成功* \n");}else{printf("该品牌添加失败 \n");return false;}//5.此时插入成功,单链表长度加一ListLen++; //6.结果return true; 
} //删除单链表里的品牌-->对于最后一个结点有限制 
/*需要单链表,要删除的品牌*/
bool DeleteNode(LinkList &L,char outBListBN[15]) 
{ //1.遍历单链表的品牌,找是否有与要删除的品牌所匹配的LNode *p = L->next; //跳过头结点,用LNode结点记录,这样稳妥,不容易出bug while(p!=NULL){result = strcmp(p->BList.g->BN,outBListBN);if(result==0) {break; //找到了,跳出循环,此时L不为NULL }else{p = p->next; //没找到,后移 } }//2.判断L结点if(p==NULL) return false; //此时代表没找到//3.此时找到了,开始删除对应的结点L即修改指针//3.1.令q指向*L的后继结点LNode *q = p->next;//3.2.和后继结点交换数据域p->BList = q->BList;//3.3.将*q结点从链中断开p->next = q->next; //3.4.释放后继结点的存储空间free(q); //4.单链表长度减一ListLen--; //5.结果 return true; 
}//查找品牌
/*需要单链表,要查找的品牌*/
LinkList LocateElem(LinkList &L,char findBListBN[15])
{//1.跳过没数据的头结点L = L->next;//2.定义q来记录结点LNode *q = L;//3.遍历单链表开始查找while( q!=NULL &&  (result=strcmp(q->BList.g->BN,findBListBN )!=0) ){q = q->next;} //4.判断if(q==NULL) //要么到了最后一个结点都没找到,要么全都没有 {printf("品牌%s不存在 \n",findBListBN);return L; //代表此时没找到 } //此时找到了,查找频次域加一 printf("品牌%s存在 \n",findBListBN);q->BList.g->num++;return L; 
} //改变商品的内容
/* 需要要改变的品牌,单链表 */
LinkList changeGoods(LinkList &L,char inBListBN[15]) 
{//ListLen=funListLen(L); //求出单链表长度 //1.查找要改变的品牌是否存在LNode *q=LocateElem(L,inBListBN);if(q==NULL){//此时不存在printf("要改变的品牌不存在 \n");return L; } //此时存在//2.改变品牌内容,重新赋值inputInBList(q->BList,ListLen); //3.结果return L; 
}int main()
{//1.创建品牌单链表LinkList L;//2.初始化单链表InitLinkList(L); static int index=0; //记录品牌代号即编号,不是第几个 printf("请输入插入品牌的个数:");int size;scanf("%d",&size);for(i=0;i<size;i++){ index++;InsertBrand(L,index);}printf("------------------------------------------------------------- \n");char outBListBN[15];printf("请输入要删除的品牌:");scanf("%s",outBListBN); flag=DeleteNode(L,outBListBN);printf("删除"); final(flag);printf("------------------------------------------------------------- \n");char changeBListBN[15];printf("请输入要修改的品牌:");scanf("%s",changeBListBN); L=changeGoods(L,changeBListBN);//printf("修改"); final(flag);printf("------------------------------------------------------------- \n");char findBListBN[15];printf("请输入要查找的品牌:");scanf("%s",findBListBN);flag=LocateElem(L,findBListBN);printf("查找"); final(flag);printf("------------------------------------------------------------- \n");            return 0;    
}

http://www.dtcms.com/a/569207.html

相关文章:

  • 广州网站制作公司排名wordpress切换语言实现
  • 门户网站开发需求分析建设网站图片高清
  • PHP 表单 - 验证邮件和URL
  • 自己感觉好点的东西
  • 计算机网络自顶向下方法30——运输层 网络拥塞控制中的公平性
  • 专门做隐形眼镜的网站seo的中文含义是什么意思
  • O2O行业风口下的运营策略与定制开发AI智能名片S2B2C商城小程序的应用研究
  • 新建代码仓库后,初始化仓库
  • 龙川做网站的wordpress 文章折叠
  • Glances服务器硬件资源监控工具
  • Docker(三)_容器打包
  • 专业做网站有哪些上海机械网站建设
  • Spring Boot异步接口性能优化:从单线程到高并发的优化历程
  • App通信:HTTP与JSON全解析
  • 网站推广什么意思资料网站怎么做的
  • win10本地部署weknora记录
  • 7、webgl 基本概念 + 前置数学知识点(向量 + 矩阵)
  • 寻花问柳专做男人的网站高端网站建设设计公司哪家好
  • Rust开发实战之RESTful API客户端开发
  • C++ 锁类型大全详解
  • 智慧园区:智能管理赋能未来发展新生态
  • 潮州 网站建设个人静态网站首页怎么做
  • 东莞网站建站推广wordpress导入演示数据
  • socket_udp
  • 基于单片机的智能家居窗帘控制系统设计(论文+源码)
  • Nestjs框架: 微服务架构拆分原则与实战指南
  • WinSCP的简单使用与SFTP自动备份 .bat脚本
  • iOS 虚拟位置设置实战,多工具协同打造精准调试与场景模拟环境
  • Qt 全球峰会 2025:中国站速递 —— 技术中立,拥抱更大生态
  • Android集成Unity避坑指南