#include<stdio.h>
#define MAX1 8800000 //准备查找成语文件的大小。
//把成语转换为二进制形式。
void toBinary(char *c,char *binaryArray) {
char ch[9] = {'\0'};
int k = 0;
int i;
int j = 0;
while ('\0' != c[j])//一个字一个字的循环。
{
if (c[j] != ',') {//当没有遇见逗号的时候。
for (i = 7;i >= 0;i--)
{
ch[i] = (c[j]&1)+'0';
c[j]>>=1;
}
for (int kk = 0; kk<=7; ++kk) {
binaryArray[k] = ch[kk];
k++;
}
}else {
binaryArray[k] = ',';
k++;
}
j++;
}
}
//定义自己的二叉树。
typedef struct Node
{
char data;
struct Node * left;
struct Node * right;
}Node;
//把二进制生成树的方法。
Node *binaryToTree(char res[]){
Node * p = NULL;
p = (Node *)malloc(sizeof(Node));
p->data = ' ';//二叉树的跟没有值。
int flag = 0;
Node * tempP = p;
tempP->left = NULL;
tempP->right = NULL;
while (res[flag]!='\0') {
if (res[flag]!=',') {
if ((res[flag]=='0')&&(tempP->left==NULL)) {
Node * p1 = (Node *)malloc(sizeof(Node));
p1->left = NULL;
p1->right = NULL;
p1->data = res[flag];
tempP->left=p1;
tempP = p1;
}else if ((res[flag]=='1')&&(tempP->right==NULL)){
Node * p2 = (Node *)malloc(sizeof(Node));
p2->left = NULL;
p2->right = NULL;
p2->data = res[flag];
tempP->right=p2;
tempP = p2;
}else{
tempP = res[flag]=='0'?tempP->left:tempP->right;
}
}else{
tempP = p;
}
flag++;
}
return p;
}
int isInTree(Node *p,char c[]){
Node * tempP = p;
int result = 1;
for (int i=0; i<96; ++i) {
if ((tempP->left!=NULL)&&(c[i]==tempP->left->data)) {
tempP = tempP->left;
}else if((tempP->right!=NULL)&&(c[i]==tempP->right->data)){
tempP = tempP->right;
}else{
result = 0;
}
}
return result;
}
void outputBinaryTree_pre(Node * head)
{
if(head)
{
printf("%c", head->data);
outputBinaryTree_pre(head->left);
outputBinaryTree_pre(head->right);
}
}
int main()
{
FILE *fp;
char name[97] = "张明漂亮";//要查找的内容。
//小的时候用栈完全可以,大的时候,必须用堆。
char *filename = malloc(MAX1);//文件存放的内容。96*80000
memset(filename,0,MAX1);//初始化为0,没有必要。
char *bijiao = malloc(MAX1);
memset(bijiao,0,MAX1);
toBinary(name, bijiao);//把要找的内容转换为二进制。
NSLog(@"bijiao===%s==",bijiao);
if((fp=fopen("/Users/zhangmingwei/Desktop/33.txt","r"))==NULL) //以读写方式打开
{
printf("Can not open file\n");
return 0;
}
fgets(filename, MAX1, fp);//读取文件内容。
char *res = malloc(MAX1);
//res 就是一会需要比较的那个包含10万个二进制的成语的字符数组了。
toBinary(filename, res);//把文件内容转换为二进制。用第二种方法来判断。
//现在只需要查找,看bijiao 是否在res 中就行了。res 中的数据是以逗号分割的。
// printf("\nres===%s\n",res);
Node *p = NULL;
p = (Node *)malloc(sizeof(Node));
p = binaryToTree(res);
printf("\n============\n");
outputBinaryTree_pre(p);
printf("\n============\n");
if (isInTree(p, bijiao)) {
printf("\n成功了\n");
}else{
printf("\n失败了\n");
}
fclose(fp);
free(filename);
free(bijiao);
free(res);
return 0;
}
- 浏览: 1353368 次
- 性别:
- 来自: 开封
最新评论
-
用户6006038975:
macd2666 写道录制出来的语音声音好轻啊。你好,这个编译 ...
ios音频录制和播放,文件很小。压缩效果不错 -
用户6006038975:
macd2666 写道录制出来的语音声音好轻啊。
ios音频录制和播放,文件很小。压缩效果不错 -
用户6006038975:
linker command failed with exit ...
ios音频录制和播放,文件很小。压缩效果不错 -
mapboo:
http://www.codertopic.com/?page ...
史上最全的iOS面试题及答案 -
macd2666:
录制出来的语音声音好轻啊。
ios音频录制和播放,文件很小。压缩效果不错
相关推荐
平均二叉树,计算平均查找长度 二叉树的删除
数据结构 二叉树的查找 代码实现过,运行没有问题
二叉树查找,,方便快捷,,效率高
3. 由TXT文本中读入一系列的数据,建立一棵平衡二叉树,并实现查找任何数据的功能,并能打印出结点的访问路径。 (Makefile编译)
建立一个二叉树,采用先序、中序、后序方法分别进行查找。
二叉树查找算法
用c++实现二叉树的查找功能,利用外部文本输入并查找
采用先序法建立一棵二叉树,设计输出某结点数据为x的双亲结点的数据的程序,二叉树的数据域类型为字符型, 扩展二叉树的叶子结点用‘#’表示,要求可以求一棵二叉树中多个结点的双亲。
在查找二叉树中增加三个功能:删除小于某一值的所有元素;删除大于某一值的所有元素;删除某一范围中的所有元素。
二叉树查找,前序遍历,中序遍历,后序遍历。树的查找。
设二叉树结点值为大写字母,输入二叉树的前序遍历和中序遍历序列,生成此二叉树,输出该二叉树的后序遍历和按...输入某结点值,在二叉树中查找该结点,若该结点存在,则输出从根到该结点的路径,否则给出不存在信息。
随机产生数 利用二叉树存储并且查找输入数值 还有程序的运行所需时间 应对老师给的任务
C++实现异质二叉树的查找、插入、删除和遍历操作。
数据结构中的二叉树建立和查找的功能的实现,对于平常的课程设计还是绰绰有余的。
java二叉树查找树生成删除添加节点
二叉树的建立查找遍历删除的程序的实现,同志们加油
查找课程设计——包括二叉树查找(C语言版)绝对无错的
c语实现了查找二叉树的建立,插入删除,遍历,前驱,后继等相关操作
c++使用二叉树进行查找 插入 删除 #include "stdafx.h" #include<iostream> using namespace std; int num_visit=0;//记录输出元素个数 struct tnode{ public: int data; public: tnode *left,*right; ...
采用一棵二叉树表示一个家谱关系,要求具有以下功能:①、文件操作功能,即家谱记录的输入、家谱记录的输出、清除全部文件记录和将家谱记录存盘。②、家谱操作功能,即用括号表示法输出家谱二叉树、查找某人的所有...