作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个 AVL 树,现在我正在尝试为该程序的用户编写一项服务。
这是我的问题:
输入:n - 操作数这很简单,我将创建一个 for 循环 (i = 0; i < n; i++)
,运行后i会递增。
但我不知道如何使用声明的操作的名称来编码条目。
操作列表:
树的结构:
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/
我是一名优秀的程序员,十分优秀!