當前位置:首頁 » 編程語言 » 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");
望樓主採納