void DestroyDSTable(BSTree &BST) {//初始条件:平衡二叉树BST存在 //操作结果:销毁BST if(BST) { DestroyDSTable(BST->lchild); DestroyDSTable(BST->rchild); free(BST); BST=NULL; } }
void DestroyDSTable(BiTree *DT) /* 同bo6-2.c */ { /* 初始条件: 动态查找表DT存在。操作结果: 销毁动态查找表DT */ if(*DT) /* 非空树 */ { if((*DT)->lchild) /* 有左孩子 */ DestroyDSTable(&(*DT)->lchild); /* 销毁左孩子子树 */ if((*DT)->rchild) /* 有右孩子 */ DestroyDSTable(&(*DT)->rchild); /* 销毁右孩子子树 */ free(*DT); /* 释放根结点 */ *DT=NULL; /* 空指针赋0 */ } }
void DestroyDSTable(DLTree &DT) { // 初始条件:双链键树DT存在。操作结果:销毁双链键树DT if(DT) // 非空树 { if(DT->kind==BRANCH&&DT->first) // *DT是分支结点且有孩子 DestroyDSTable(DT->first); // 销毁孩子子树 if(DT->next) // 有兄弟 DestroyDSTable(DT->next); // 销毁兄弟子树 free(DT); // 释放根结点 DT=NULL; // 空指针赋0 } }
void DestroyDSTable(DLTree *DT) { /* 初始条件: 双链键树DT存在。操作结果: 销毁双链键树DT */ if(*DT) /* 非空树 */ { if((*DT)->kind==BRANCH&&(*DT)->a.first) /* *DT是分支结点且有孩子 */ DestroyDSTable(&(*DT)->a.first); /* 销毁孩子子树 */ if((*DT)->next) /* 有兄弟 */ DestroyDSTable(&(*DT)->next); /* 销毁兄弟子树 */ free(*DT); /* 释放根结点 */ *DT=NULL; /* 空指针赋0 */ } }
void DestroyDSTable(BSTree &DT) // 同bo6-2.cpp { // 初始条件: 动态查找表DT存在。操作结果: 销毁动态查找表DT if(DT) // 非空树 { if(DT->lchild) // 有左孩子 DestroyDSTable(DT->lchild); // 销毁左孩子子树 if(DT->rchild) // 有右孩子 DestroyDSTable(DT->rchild); // 销毁右孩子子树 free(DT); // 释放根结点 DT=NULL; // 空指针赋0 } }
void main() { BiTree dt, p; int i; KeyType j; ElemType r[N] = { {45,1},{12,2},{53,3},{3,4},{37,5},{24,6},{100,7},{61,8},{90,9},{78,10} }; /* 以教科书图9.7(a)为例 */ InitDSTable(&dt); /* 构造空表 */ for (i = 0; i < N; i++) InsertBST(&dt, r[i]); /* 依次插入数据元素 */ TraverseDSTable(dt, print); printf("\n请输入待查找的值: "); scanf("%d", &j); p = SearchBST(dt, j); if (p) { printf("表中存在此值。"); DeleteBST(&dt, j); printf("删除此值后:\n"); TraverseDSTable(dt, print); printf("\n"); } else printf("表中不存在此值\n"); DestroyDSTable(&dt); }
void main() { DLTree t; int i; char s[MAX_KEY_LEN+1]; KeysType k; Record *p; Record r[N]={{{"CAI"},1},{{"CAO"},2},{{"LI"},3},{{"LAN"},4},{{"CHA"},5},{{"CHANG"},6}, {{"WEN"},7},{{"CHAO"},8},{{"YUN"},9},{{"YANG"},10},{{"LONG"},11}, {{"WANG"},12},{{"ZHAO"},13},{{"LIU"},14},{{"WU"},15},{{"CHEN"},16}}; /* 数据元素(以教科书式9–24为例) */ InitDSTable(&t); for(i=0;i<N;i++) { r[i].key.num=strlen(r[i].key.ch); p=SearchDLTree(t,r[i].key); if(!p) /* t中不存在关键字为r[i].key的项 */ InsertDSTable(&t,&r[i]); } printf("按关键字符串的顺序遍历双链键树:\n"); TraverseDSTable(t,print); printf("\n请输入待查找记录的关键字符串: "); scanf("%s",s); k.num=strlen(s); strcpy(k.ch,s); p=SearchDLTree(t,k); if(p) print(*p); else printf("没找到"); printf("\n"); DestroyDSTable(&t); }
void DestroyDSTable(BTree &DT) { int i; if (DT) { for (i = 0; i <= DT->keynum; i++) DestroyDSTable(DT->ptr[i]); free(DT); DT = NULL; } }
void DestroyDSTable(TrieTree *T) { /* 初始条件:Trie树T存在。操作结果:销毁Trie树T */ int i; if(*T) /* 非空树 */ { for(i=0;i<LENGTH;i++) if((*T)->kind==BRANCH&&(*T)->a.bh.ptr[i]) /* 第i个结点不空 */ if((*T)->a.bh.ptr[i]->kind==BRANCH) /* 是子树 */ DestroyDSTable(&(*T)->a.bh.ptr[i]); else /* 是叶子 */ { free((*T)->a.bh.ptr[i]); (*T)->a.bh.ptr[i]=NULL; } free(*T); /* 释放根结点 */ *T=NULL; /* 空指针赋0 */ } }
//访问数据data int main(int argc,char *argv[]) { BSTree BST,ptr; KeyType key; int i; TElemType R[MAX]={{1012,"0304110512","胡菲菲","女",21,"生物工程"}, {1006,"0304110506","李志昌","男",21,"微电子工程"}, {1005,"0304110505","李经国","男",21,"工程设计"}, {1010,"0304110510","刘京","女",21,"计算机"}, {1003,"0304110503","单加猛","男",21,"通信工程"}, {1004,"0304110504","韩少军","男",23,"软件工程"}, {1011,"0304110511","朱紫婧","女",21,"信息安全"}, {1008,"0304110508","刘高鑫","男",21,"物联网"}, {1001,"0304110501","毕大成","男",21,"动画"}, {1007,"0304110507","刘春功","男",21,"英语"}, {1002,"0304110502","程学涵","男",21,"材料工程"}, {1009,"0304110509","罗金伟","男",21,"机械工程"}}; InitDSTable(BST); for(i=0;i<MAX;i++) { if(!(SearchDSTable(BST,R[i].key))) InsertDSTable(BST,R[i]); } while(1) { printf("输入搜索关键字,0结束:"); scanf("%d%*c",&key); if(key==0) break; if((ptr=SearchDSTable(BST,key))) Visit(ptr->data); else printf("搜索失败!\n"); } TraverseDSTable(BST,Visit); DestroyDSTable(BST); system("pause"); return 0; }
void main() { BSTree dt, p; Status k; int i; KeyType j; ElemType r[N] = { {13,1},{24,2},{37,3},{90,4},{53,5} }; /* (以教科书图9.12为例) */ InitDSTable(&dt); /* 初始化空树 */ for (i = 0; i < N; i++) InsertAVL(&dt, r[i], &k); /* 建平衡二叉树 */ TraverseDSTable(dt, print); /* 按关键字顺序遍历二叉树 */ printf("\n请输入待查找的关键字: "); scanf("%d", &j); p = SearchBST(dt, j); /* 查找给定关键字的记录 */ if (p) print(p->data); else printf("表中不存在此值"); printf("\n"); DestroyDSTable(&dt); }
int main(void) { DLTree t; int i,j=0; KeyType k; Status flag; Record *p,r[N]; FILE *f; InitDSTable(t); f=fopen("1.txt","r"); do { i=fscanf(f,"%s%d",&r[j].key.ch,&r[j].others.order); if(i!=-1) { r[j].key.num=strlen(r[j].key.ch); flag=InsertDSTable(t,&r[j]); if(flag==FALSE) printf("��t���Ѵ��ڹؼ���Ϊ%s�ļ�¼����(%s,%d)�����롣\n", r[j].key.ch,r[j].key.ch,r[j].others.order); j++; } }while(!feof(f)&&j<N); fclose(f); printf("���ؼ��ַ�����˳�������t��\n"); TraverseDSTable(t,Visit); printf("\n����������Ҽ�¼�Ĺؼ��ַ�����"); InputKey(k.ch); k.num=strlen(k.ch); p=SearchDLTree(t,k); if(p) Visit(p); else printf("δ�ҵ�"); printf("\n"); DestroyDSTable(t); return 0; }
void main() { TrieTree t; int i; char s[MAXKEYLEN+1]; KeysType k; Record *p; Record r[N]={{{"CAI"},1},{{"CAO"},2},{{"LI"},3},{{"LAN"},4}, {{"CHA"},5},{{"CHANG"},6},{{"WEN"},7},{{"CHAO"},8}, {{"YUN"},9},{{"YANG"},10},{{"LONG"},11},{{"WANG"},12}, {{"ZHAO"},13},{{"LIU"},14},{{"WU"},15},{{"CHEN"},16}}; /* 数据元素(以教科书式9-24为例) */ InitDSTable(&t); for(i=0;i<N;i++) { r[i].key.num=strlen(r[i].key.ch)+1; r[i].key.ch[r[i].key.num]=Nil; /* 在关键字符串最后加结束符 */ p=SearchTrie(t,r[i].key); if(!p) InsertTrie(&t,&r[i]); } printf("按关键字符串的顺序遍历Trie树(键树):\n"); TraverseDSTable(t,pr); printf("\n请输入待查找记录的关键字符串: "); scanf("%s",s); k.num=strlen(s)+1; strcpy(k.ch,s); k.ch[k.num]=Nil; /* 在关键字符串最后加结束符 */ p=SearchTrie(t,k); if(p) pr(p); else printf("没找到"); printf("\n"); DestroyDSTable(&t); }