#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{//化妆品信息得结构体
char brandname[10];
//品牌名
double price;
//价格
}
datatype;
typedef struct node
{
//=叉排序树链表得结点结构
datatype data;
//结点信息
struct node*lchild,*rchild;
//指向左孩子与右孩子得指针
}bintnode;
typedef bintnode*bintree;
//结点指针类型
bintree root;
//指向二叉树根结点得指针
void InsertBintree(bintree*t,datatype addnode)
//创建新结点
{
bintree f=NULL,p=*t;
//p指向根结点
while(p)
//每次从根结点开始比较,查找插入位置
{
if (strcmp(addnode.brandname,p->data.brandname)==0&&addnode.price==p->data.price)
{
printf("已录入该化妆品信息,本次录入无效!\n");
return;
}
//若二叉排序树中已含addnode,则无需插入,ruturn退出函数f=p;
//f用于保存新结点得最终插入位置
p=((addnode.price)<(p->data.price))?p->lchild:p->rchild;}
p=(bintree)malloc(sizeof(bintnode));
//生成待插入得新结点
p->data=addnode;
//将新结点加到树上
p->lchild=p->rchild=NULL;
if(*t==NULL)*t=p;
//原树为空,将值赋值给根结点
else
{
if (addnode.price<f->data.price)f->lchild=p;
else f->rchild=p;
}
}
bintree CreatBintree()//创建二叉排序树链表
{
bintree t=NULL;
datatype addnode;
//录入化妆品信息
printf("\"end\",\"-1\"为结束标记:\n");
scanf("%s",addnode.brandname);
scanf("%lf",&addnode.brandname);
while((strcmp(addnode.brandname,"end")!=0)||(addnode.price!=-1))
{
InsertBintree(&t,addnode);
//将addnode插入二叉排序树
scanf("%s",addnode.brandname);
scanf("%lf",&addnode.price);
}
printf("化妆品信息二叉排序树建立成功,\n");
return t;
//返回二叉排序树得根地址
}
void inorder(bintree t)
//递归实现二叉树中序遍历输出
{
if(t)
{
inorder(t->lchild);
printf("\t\t 品牌名:%s",t->data.brandname);
printf("\t价格:%g元\n",t->data.price);
inorder(t->rchild);
}
}
//main、C
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int s=1;
int set;
while(s)
{
printf("\t\t\n");
printf("\t\t简单化妆品信息处理系统\n");
printf("\t\t \n");
printf("\t\t 1、录入化妆品信息\n");
printf("\t\t 2、输出化妆品信息\n");
printf("\t\t 3、退出系统\n");
printf("\t\t \n");
printf("选择操作:" );
scanf("%d",&set);
switch(set)
{
case 1:root=CreatBintree();
break;
case 2:{printf("化妆品品牌价格一览表(价格从低到高):\n");
printf("\t\t\n");
inorder(root);
printf("\t\t\n");
break;
}
case 3:s=0;
printf("\t系统退出成功,\n");
break;
default:printf("无该选项对应得操作!\n");
}system("pause");
system("cls");
}
return 0;
}
想问各位,这个代码可以运行,但是当我录入第二种商品时,还没给我结束的机会,随便按一个键,那个运行框就自动关闭了,而且这行代码62处好像有一个错误,求各位解答
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- bingbingyihao 2022-11-29 18:23关注
回答:不能说你写得不好,有几点需要说明一下,一是变量命名问题,尽量取名字取的好一些,然后注意代码格式,注释格式;最后是指针的使用,有一个地方的指针你没有进行声明赋值,直接就空指针就直接取内容,报错了
修改了之后的结果
# include<stdio.h> # include<stdlib.h> # include<string.h> typedef struct { char brandname[10]; double price; } datatype; typedef struct node { datatype data; struct node *lchild, *rchild; } bintnode; typedef bintnode *bintree; bintree root; void InsertBintree(bintree* t, datatype addnode) { bintree f = NULL, p = *t; while (p) { if (strcmp(addnode.brandname, p->data.brandname) == 0 && addnode.price == p->data.price) { printf("已录入该化妆品信息,本次录入无效!\n"); return; } p = ((addnode.price) < (p->data.price)) ? p->lchild : p->rchild; } p = (bintree)malloc(sizeof(bintnode)); p->data = addnode; p->lchild = p->rchild = NULL; if (*t == NULL) *t = p; else { f = *t; if (addnode.price < f->data.price) f->lchild = p; else f->rchild = p; } } bintree CreatBintree() { bintree t = NULL; datatype addnode; printf("\"end\",\"-1\"为结束标记:\n"); while(true) { datatype addnode; scanf("%s", addnode.brandname); scanf("%lf", &addnode.price); if(strcmp(addnode.brandname, "end") == 0 && (int)addnode.price == -1) { printf("输入结束\n"); break; } InsertBintree(&t, addnode); } printf("化妆品信息二叉排序树建立成功,\n"); return t; } void inorder(bintree t) { if (t) { inorder(t->lchild); printf("\t\t 品牌名:%s", t->data.brandname); printf("\t价格:%g元\n", t->data.price); inorder(t->rchild); } } int main() { int s = 1; int set; while (s) { printf("\t\t\n"); printf("\t\t简单化妆品信息处理系统\n"); printf("\t\t \n"); printf("\t\t 1、录入化妆品信息\n"); printf("\t\t 2、输出化妆品信息\n"); printf("\t\t 3、退出系统\n"); printf("\t\t \n"); printf("选择操作:"); scanf("%d", &set); switch (set) { case 1: root = CreatBintree(); break; case 2: { printf("化妆品品牌价格一览表(价格从低到高):\n"); printf("\t\t\n"); inorder(root); printf("\t\t\n"); break; } case 3: s = 0; printf("\t系统退出成功,\n"); break; default: printf("无该选项对应得操作!\n"); } system("pause"); system("cls"); } return 0; }
我实在是没有办法忍受不换行写括号的,而且很多地方的格式太过紧凑,不方便阅读,这里稍作修改了一下;主要就是那个空指针问题
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题
- ¥15 matlab不知道怎么改,求解答!!
- ¥15 永磁直线电机的电流环pi调不出来
- ¥15 用stata实现聚类的代码
- ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效
- ¥15 悬赏!微信开发者工具报错,求帮改