当前位置:首页 » 编程语言 » C语言trie树删除
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

C语言trie树删除

发布时间: 2022-03-02 11:04:57

Ⅰ 增加数据字典表;有增、删、改、查操作。

1、C——create 增加、创建,向数据库添加数据
格式:insert into 表名 values(列值1,列值2,...........列值n)
insert into Fruit values(‘K009‘,‘苹果‘,3.0,‘高青‘,90,‘‘)
insert into Fruit(Ids,Name,Price,Source,Numbers) values(‘K010‘,‘苹果‘,3.0,‘高青‘,90)
2、R——retrieve 检索、查询,从数据库中查询数据
a.查询所有 select * from 表名
b.查指定列 select 列名,列名 from 表名
c.替换列名 select Ids ‘代号‘,Name ‘名称‘,Price ‘价格‘,Source ‘产地‘ from Fruit
d.查指定行
select * from Fruit where Ids=‘K006‘
select * from Fruit where Price=2.4 and Source=‘烟台‘
select * from Fruit where Price between 2.0 and 4.0
select * from Fruit where Numbers in (90,80,70)

Ⅱ 如何用c语言的数据结构做一个英语词典,要求是:用二叉树,能实现建立词典,查找插入删除单词

#include
<stdio.h>
#include
<malloc.h>
#include
<string.h>
#include
<ctype.h>
#define
MAXWORD
100
typedef
struct
tnode{
char
*word;
int
count;
struct
tnode
*left;
struct
tnode
*right;
//
tnode(char
*s,
int
w,
tnode
*p,
tnode
*q){
//
//
}
}*tnodeptr;
struct
tnode
*addtree(struct
tnode
*,
char
*);
void
deltree(struct
tnode
*,
char
*);
void
treeprint(struct
tnode*,
FILE
*fp,
int
n,
int
&m);
void
showMenu();
void
main()
{
int
N,
k;
FILE
*fp;
struct
tnode
*root;
char
word[MAXWORD],
txt[25];
root=NULL;
while
(1)
{
showMenu();
scanf("%d",
&N);
switch(N)
{
case
1:
printf("连续输入,字符
0
结束:\n");
while
(scanf("%s",
word)!=EOF)
{
if(word[0]=='0')
break;
if(isalpha(word[0]))
root=addtree(root,
word);
}
printf("单词已插入\n");
break;
case
2:
if(root==NULL)
{printf("NULL字典\n");
break;}
printf("字典:\n");
treeprint(root,
fp,
0,k
=
1);
break;
case
3:
printf("输入删除的单词\n");
scanf("%s",
word);
deltree(root,
word);
break;
case
4:
printf("输入保存文件名:
");
scanf("%s",
txt);
strcat(txt,
".txt");
fp=fopen(txt,
"w");
if(fp==NULL)
{printf("文件写错误!");
break;}
treeprint(root,
fp,
1,
k
=
1);
fclose(fp);
printf("以保存到%s
\n",
txt);
break;
case
0:
return
;
default:
printf("输入错误!");
break;
}
}
return
;
}
struct
tnode*
talloc();
char
*strp(char*);
struct
tnode
*addtree(struct
tnode
*p,
char
*w)
{
int
cond;
if
(p==NULL)
{
p=talloc();
p->word=strp(w);
p->count=1;
p->left=p->right=NULL;
}
else
if((cond=strcmp(w,
p->word))==0)
p->count++;
else
if
(cond<0)
p->left=addtree(p->left,
w);
else
p->right=addtree(p->right,
w);
return
p;
}
/**************************************************************************
*
分4种情况:
*
1.
叶子结点:直接删除;
*
2.
结点只有左孩子:将该左孩子连接到该结点的双亲;
*
3.
结点只有右孩子:将该右孩子连接到该结点的双亲;
*
4.
结点有左右孩子:
*
a.
将该结点左子树的最右结点与该结点互换,然后删除左子树的最右结点;
*
或者
*
b.
将该结点右子树的最左结点与该结点互换,然后删除右子树的最左结点。
***************************************************************************/
void
deltree(struct
tnode
*p,
char
*w)
{
int
co,
t=0;
struct
tnode
*q=NULL,
*r=NULL;
while
(p!=NULL
&&
(co=strcmp(w,
p->word))!=0)
{
if(co
<
0)
{q
=p;
p=p->left;
t
=1;}
else
{q
=p;
p=p->right;
t
=0;}
}
if(p==NULL)
printf("没有此单词!\n");
else
if
(p->left==NULL
&&
p->right==NULL)
//<1>
{
if(t==1)q->left=
NULL;
else
q->right=NULL;
}
else
if(p->left
&&
p->right==NULL)
//<2>
{
if(t==1)
q->left=p->left;
else
q->right
=p->left;
}
else
if(p->left==NULL
&&
p->right)
//<3>
{
if(t==1)q->left=p->right;
else
q->right=p->right;
}
else
//<4>
{
r=p->left;
while(r->right)r
=r->right;
r->right
=p->right;
if(t==1)q->left
=
r;
else
q->right
=
r;
}
printf("已删除:%s
\n",
w);
return
;
}
//------------------------
//print
//------------------------
void
treeprint(struct
tnode*
p,FILE
*fp,
int
n,
int
&m)
{
if(p!=NULL)
{
treeprint(p->left,
fp,
n,m);
if(n)fprintf(fp,
"%-4d%-4d%s\n",m++,p->count,p->word);
else
printf("%-4d%-4d%s\n",m++,p->count,p->word);
treeprint(p->right,
fp,
n,m);
}
}
struct
tnode
*talloc()
{
return
(struct
tnode*)malloc(sizeof(struct
tnode));
}
char
*strp(char*s)
{
char
*p;
p=(char*)malloc(strlen(s)+1);
if(p!=NULL)
strcpy(p,
s);
return
p;
}
void
showMenu()
{
printf("\n
输入选择\t
\
\n
1.
输入单词
\
\n
2.
查看字典
\
\n
3.
删除单词
\
\n
4.
保存字典
\
\n
0.
退出\n");
}

Ⅲ c语言编程 实现ip地址查找 方法用二进制trie

不知道您有没有学习过计算机网络。如果没有,下面简单介绍一下IP地址和掩码。
IP地址是32位的,也就是4字节。取值可以任意。
掩码也是32位的,一般建议前面的位都为1,后面的位都为0。所以本题:
(1)只要是32位的都是有效的。
(2)判断是否全1后面接全0.
(3)如果掩码的前n位为1,那么此IP所在网络全部有效IP地址是此IP地址的前n位不变,后面的位从全0到全1,比如IP地址为1.1.1.1掩码为FFFF0000,那么此IP地址所在网络的全部有效IP地址是从1.1.0.0到1.1.255.255。
(4)两个IP地址都与掩码进行二进制与,看得到的结果是否相同,如果相同则在同一子网中,否则不在同一子网中。这个用c很容易实现。

Ⅳ c++ trie树与指针

性质:
1.根节点不包含字符,除根节点外的每一个节点都只包含一个字符。
2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
3.每个节点的所有子节点包含的字符都不相同。
优点:
1.查询快。对于长度为m的键值,最坏情况下只需花费O(m)的时间;而BST需要O(m log n)的时间。
2.当存储大量字符串时,Trie耗费的空间较少。因为键值并非显式存储的,而是与其他键值共享子串。
操作:
1.初始化或清空:遍历Trie,删除所有节点,只保留根节点。

Ⅳ c语言:编写一个程序找出一组单词中的“最小“和“最大“的单词(单词在字典中的先后顺序,字典中先出现

strcmp(largest_word, a);/*这一步没有运行*/

这一行写错了,不是应该strcpy么,不是strcmp。

#include<stdio.h>

#include<string.h>

int main()

{

char ch[5][10];

char min[10],max[10];

int i;

for(i=0;i<5;i++)

{

gets(ch[i]);

}

strcpy(min,ch[0]);

strcpy(max,ch[0]);

for(i=1;i<5;i++)

{

if(strcmp(max,ch[i])<=0)

(5)C语言trie树删除扩展阅读

C语言的运算符主要用于构成表达式,同一个符号在不同的表达式中,其作用并不一致。下面按计算的优先顺序,分别说明不同作用的表达式。需要特别指出,在C语言标准中,并没有结合性的说法。

相同优先级运算符,从左至右依次运算。注意后缀运算优先级高于前缀。因此++i++应解释为++(i++)。

而与或非的运算优先级都不一样,因此a && b || b && c解释为(a && b) || (b && c)

合理使用优先级可以极大简化表达式。

Ⅵ 求一个实现简单的英汉词典(30词左右)c++的C语言程序

字典最快速的实现方法是trie tree。
这个树是专门用来实现字典的。但是trie tree的删除操作比较麻烦。用二叉查找树可以实现,速度也可以很快。AVL tree只不过是平衡的二叉树,在字典这个应用上没有客观的速度提升,因为字典不会产生极端化的二叉树(链表)。
下面是我的二叉查找树的代码。二叉查找树的优点是实现容易,而且它的inorder traverse既是按照字母顺序的输出。
//binary search tree, not self-balancing

//by Qingxing Zhang, Dec 28,2009. prep for google interview

#include <iostream>
using namespace std;

struct BST
{
int data;
BST *left;
BST *right;
};

//runtime: O(logn) on average, O(n) worst case
bool search(BST *&root, int key)//return false if the key doesn't exist
{
if(root==NULL)
return false;
if(key < root->data)
return search(root->left,key);
else if(key > root->data)
return search(root->right,key);
else
return true;
}

//runtime: O(logn)on average, O(n) worst case
bool insert(BST *&root, int key)//return false if the key already exists
{
if(root==NULL)
{
BST *node = new BST;
node->data = key;
node->left = node->right = NULL;
root = node;
return true;
}
else if(key < root->data)
return insert(root->left,key);
else if(key > root->data)
return insert(root->right,key);
else
return false;
}

//runtime:O(logn) on average, O(n) worst case
bool remove(BST *&root,int key)//return false if the key doesn't exist.
{
if(root==NULL)//no such key
return false;
else if(key < root->data)
return remove(root->left,key);
else if(key > root->data)
return remove(root->right,key);
else//node found
{
if((root->left==NULL)&&(root->right==NULL))//no child(leaf node)
{
BST *tmp = root;
root = NULL;
delete tmp;
}
else if((root->left==NULL)||(root->right==NULL))//one child
{
BST *tmp = root;
if(root->left==NULL)
root = root->right;
else
root = root->left;
delete tmp;
}
else//two children:replace node value with inorder successor and delete that node
{
BST *tmp = root->right;
while(tmp->left!=NULL)
tmp = tmp->left;
int tmpdata = tmp->data;
remove(root,tmpdata);
root->data = tmpdata;
}
return true;
}
}
//runtime:O(n)
void inorder(BST *&node)
{
if(node!=NULL)
{
inorder(node->left);
cout << node->data << " ";
inorder(node->right);
}
}
//runtime:O(n)
void preorder(BST *&node)
{
if(node!=NULL)
{
cout << node->data << " ";
preorder(node->left);
preorder(node->right);
}
}
//runtime:O(n)
void postorder(BST *&node)
{
if(node!=NULL)
{
postorder(node->left);
postorder(node->right);
cout << node->data << " ";
}
}

int main()
{
bool b;
BST *root = NULL;
b = insert(root,1);
b = insert(root,3);
b = insert(root,7);
b = insert(root,5);
b = insert(root,77);
b = insert(root,10);
b = insert(root,4);
b = insert(root,13);

//inorder
cout << "In-order:";
inorder(root);
cout << endl;
//preorder
cout << "Pre-order:";
preorder(root);
cout << endl;
//postorder
cout << "Post-order:";
postorder(root);
cout << endl;
// search for 7
if(search(root,7))
cout << "7 found!" << endl;
else
cout << "7 doesn't exist!" << endl;

b = remove(root,7);
cout << "----------------" << endl;

//inorder
cout << "In-order:";
inorder(root);
cout << endl;
//preorder
cout << "Pre-order:";
preorder(root);
cout << endl;
//postorder
cout << "Post-order:";
postorder(root);
cout << endl;

if(search(root,7))
cout << "7 found!" << endl;
else
cout << "7 doesn't exist!" << endl;

return 0;
}

Ⅶ 如何用c语言的数据结构做一个英语词典,要求是:用二叉树,能实现建立词典,查找插入删除单词

自己写吧,别人只能告诉你思路。
如果别人替你写了,坏处
(1)浪费别人时间
(2)你什么都没学会
好处
(1)你去交差
坏处多于好处,为什么要替你写?

Ⅷ c语言中如何统计一篇英文文章中每个单词的词频(要输出)并可替换其中的单词 不使用memset函

可以用hash表或者Trie树实现。hash表不容易替换。

Ⅸ C语言递归实现字典顺序枚

#include<stdio.h>
voidpermute(int);
#defineN7
inta[N];
intn=0;

voidmain()
{
inti;
for(i=0;i<N;i++)
{
a[i]=i+1;
}
permute(N);
printf("totalis:%d ",n);
}
voidpermute(intk)
{
inti,j,temp;
if(k==1)
{
for(i=0;i<N;i++)
{
printf("%d",a[i]);
}
printf(". ");
n++;
if(n%4==0)
{
printf(" ");
}
}
else
{
permute(k-1);
for(j=N-k+1;j<N;j++)
{
temp=a[N-k];
a[N-k]=a[j];
a[j]=temp;
permute(k-1);
temp=a[N-k];
a[N-k]=a[j];
a[j]=temp;
}
}

}

Ⅹ 用C语言写个具有查字典功能的程序,谁帮我看看哪里出错了

fgets(a,1000,fp);是读取文件而你的文件打开方式确是
fp=fopen("E:\\13计科外包班\\词典工程\\dict.txt","w");
你是已写的方式打开的
要改成
fp=fopen("E:\\13计科外包班\\词典工程\\dict.txt","r");
望楼主采纳