gpt4 book ai didi

c - 已申报业务名称的录入程序

转载 作者:行者123 更新时间:2023-11-30 20:38:12 25 4
gpt4 key购买 nike

我编写了一个 AVL 树,现在我正在尝试为该程序的用户编写一项服务。

这是我的问题:

输入:n - 操作数这很简单,我将创建一个 for 循环 (i = 0; i < n; i++) ,运行后i会递增。

但我不知道如何使用声明的操作的名称来编码条目。

操作列表:

  • insert x - 将 x 插入 AVL 树
  • 删除x - 从AVL树中删除x
  • min - 打印最小元素
  • max - 打印最大元素

树的结构:

entestruct avl_tree {
int key;
int bf;
struct avl_tree *up;
struct avl_tree *left;
struct avl_tree *right;
};

typedef struct avl_tree node;

我对插入函数进行了编码,如下所示:

void insert(node **tree, int k){ ... }

我知道如何为树增加值(value):insert(&root, k) ,但我不知道如何从用户那里获取一行包含操作名称和值的行,以及当操作不需要像操作最小值或最大值这样的值时我应该做什么。

程序如何工作的示例:

输入:

4 // [this is n - number of operations]    
insert 1 // [insert(&root, k)]
insert 3 // [insert(&root, k]
max // [max(k)]
min // [min(k)]

输出:

3
1

最佳答案

好的,我写了一些代码:

char str[100];
int n, x, i;

scanf("%d", &n);

for(i = 0; i<=n; i++){

fgets(str, sizeof str, stdin);

if (!strncmp(str, "insert", 6)) {
sscanf(str,"%*[^0-9]%d", &x);
insert(&root, x);
str[0] = '\0';
}


if (!strncmp(str, "delete", 6)) {
sscanf(str,"%*[^0-9]%d", &x);
delete(&root, x);
str[0] = '\0';
}


if (!strncmp(str, "max", 3)) {
max(&root);
str[0] = '\0';
}

if (!strncmp(str, "min", 3)) {
min(&root);
str[0] = '\0';
}
}

它的解决方案很好吗?

编辑:

好的,它可以工作了。以下是包含一些新操作的 main 的完整代码:

node *root;
root = NULL;
node *tmp;
tmp = NULL;

char str[100];
int n, x, i;

scanf("%d", &n);

for(i = 0; i<=n; i++){
fgets(str, sizeof str, stdin);

if (!strncmp(str, "insert", 6)) {
sscanf(str,"%*[^0-9]%d", &x);
insert(&root, x);
str[0] = '\0';
}

if (!strncmp(str, "delete", 6)) {
sscanf(str,"%*[^0-9]%d", &x);
tmp = find(root, x);
if(tmp) removeAVL(&root, tmp);
str[0] = '\0';
}

if(!strncmp(str, "find", 4)) {
sscanf(str,"%*[^0-9]%d", &x);
tmp = find(root, x);
if(tmp) printf("%d\n", 1);
else printf("%d\n", 0);
str[0] = '\0';
}

if(!strncmp(str, "inorder", 7)) {
if(root) print_inorder(root);
else printf(" ");
printf("\n");
str[0] = '\0';
}

if (!strncmp(str, "max", 3)) {
if(root) max(root);
else printf(" \n");
str[0] = '\0';
}

if (!strncmp(str, "min", 3)) {
if(root) min(root);
else printf(" \n");
str[0] = '\0';
}
}

return 0;

关于c - 已申报业务名称的录入程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30163991/

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