gpt4 book ai didi

c - 搜索 - BST- 获取段错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:39 26 4
gpt4 key购买 nike

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct node
{
int data;
struct node *right, *left;
};
struct node *root = NULL;

int flag = 0;

void insert(int val){
struct node *t, *p;
t = (struct node*)malloc(sizeof(struct node));
t->data = val;
t->left = NULL;
t->right = NULL;
p = root;
if( root == NULL ){
root = t;
return;
}
struct node *curn = root;

while(curn){
p = curn;
if(t->data > curn->data){
curn = curn->right;
}
else{
curn = curn->left;
}
}
if(t->data > p->data){
p->right = t;
}
else{
p->left = t;
}
}
int search(int val){

if(root->data == val){
return 1;
}
struct node *curn;
curn = root;
while(curn){
if(curn->data < val){
curn = curn->right;
if(curn->data == val){
return 1;
}
}
if(curn->data > val){
curn = curn->left;
if( curn->data == val ){
return 1;
}
}
}
return 0;
}
int main(void){
char opt[5] = "yes";
int val, sear;
while(1){
printf("Enter the key number:\n");
scanf("%d",&val);
insert(val);
printf("Do you want to create another junction?\n");
scanf("%s",opt);
if(strcmp(opt,"yes") == 0){
continue;
}
if(strcmp(opt, "no") == 0){
printf("Enter the key to be searched\n");
scanf("%d",&sear);
flag = search(sear);
if(flag == 1){
printf("%d found",sear);
return 0;
}
printf("%d not found",sear);
return 0;
}
}

}

在搜索过程中,如果搜索键可用,它会显示找到的键,不会抛出任何错误。

但是如果搜索键不存在意味着它会抛出一个错误段错误(核心转储),为什么这个段错误出现在我的代码中?

最佳答案

您的代码在这里:

if(curn->data < val){
curn = curn->right;
if(curn->data == val){
return 1;
}
}
if(curn->data > val){
curn = curn->left;
if( curn->data == val ){
return 1;
}
}

curn = curn->left; 在此行之后,curn 可能为 NULL,因此 curn->data 将抛出段错误.您想在 ifelse if 控件中检查 curn->data == val,如下所示:

if(curn->data < val){
curn = curn->right;
}
else if(curn->data > val){
curn = curn->left;
}
else {
return 1;
}

无需检查 curn->data == val,因为如果它不小于或大于,则它必须等于。

关于c - 搜索 - BST- 获取段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45222188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com