| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2169 人关注过本帖
标题:数据结构关于二叉排序树的问题
只看楼主 加入收藏
圈圈想学习
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-4-15
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:3 
数据结构关于二叉排序树的问题
程序应该总体没什么问题……就是运行到树状查找的时候VC6.0就停止工作了……然后我调试的时候就会出现这样的情况[local]1[/local]
然后我百度了下……说是我动态内存没有分配成功……233我基础不太扎实 求大神来讲解啊!明天交作业……
这是我的代码
谢谢大家~求帮忙嘤嘤嘤
#include<iostream>
#include<malloc.h>
#include <stdlib.h>
using namespace std;
#define MAX 100
typedef struct
{
    int key[MAX];
    int n;
}NodeType;
void SeqSearch(NodeType R,int n,int k)
{
    int i=0;
    while(i<n&&R.key[i]!=k)
        i++;
    if(i<n)
        cout<<i<<":"<<R.key[i]<<endl;
}
void BinSearch(NodeType R,int n,int k)
{
    int low=0,high=n-1,mid;
    while(low<=high)
    {
        mid=(low+high)/2;
        if(R.key[mid]==k)
        {   
            cout<<mid<<":"<<R.key[mid]<<endl;
            break;
        }
        else if(R.key[mid]>k)
            high=mid-1;
        else
            low=mid+1;
    }
}
typedef struct IdxType
{
    int key[MAX];
    int low[MAX],high[MAX];
}IdxType;
void IdxSearch(NodeType R,IdxType idx,int k,int bn)  //bn为块的个数
{
    int i,high=bn,low=1,mid,j,FIND=0;
    while(low<=high&&!FIND)
    {
        mid=(low+high)/2;
        if(k<idx.key[mid])
            high=mid-1;
        else if(k>idx.key[mid])
            low=mid-1;
        else
            FIND=1;
    }
    if(FIND==1)
    {
        i=idx.low[mid];
        j=idx.high[mid];
    }
    else if(low<bn)
    {
        i=idx.low[mid];
        j=idx.high[mid];
    }
    while(i<=j&&R.key[i]!=k)
    {
        i++;
    }
    if(i>j)
        i=0;
    cout<<i<<":"<<R.key[i]<<endl;
}
void create(NodeType R,IdxType &Idx,int x,int z)   //建立索引表
{
    int i,j,k,t,max=0;
    k=x/z;
    t=x%z;
    if(t==0)
    {
        for(i=0;i<z;i++)
        {
            for(j=z*i;j<k;j++)
            {
                if(max<R.key[j])
                    max=R.key[j];
            }
            Idx.key[i+1]=max;
            Idx.low[i+1]=z*i;
            Idx.high[i+1]=z*i+k;
        }
    }
    else
    {
        for(i=0;i<z-1;i++)
        {
            for(j=z*i;j<k;j++)
            {
                if(max<R.key[j])
                    max=R.key[j];
            }
            Idx.key[i+1]=max;
            Idx.low[i+1]=z*i;
            Idx.high[i+1]=z*i+k;
        }
        if(i==z-1)
        {
            for(j=z*i;j<k+t;j++)
            {
                if(max<R.key[j])
                    max=R.key[j];
            }
            Idx.key[i+1]=max;
            Idx.low[i+1]=z*i;
            Idx.high[i+1]=z*i+k+t;
        }
    }
}
typedef struct BiTNode
{
    int data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void insert(BiTree &T,int x)
{
    BiTree p,q;
    int i=0;
    p=(BiTree)malloc(sizeof(BiTNode));
    p->data=x;
    p->lchild=p->rchild=NULL;
    if(T==NULL)
    {
        T=p;
    }
    else
    {
        q=T;
        while(i==0)
        {
            if(p->data>x)
            {
                if(p->lchild!=NULL)
                {
                    p=p->lchild;
                }
                else
                {
                    p->lchild=q;
                    i=1;
                }
            }
            else
            {
                if(p->data!=NULL)
                {
                    p=p->rchild;
                }
                else
                {
                    p->rchild=q;
                    i=1;
                }
            }
        }
    }
}
void creat(BiTree &T,NodeType R,int n)
{
    int i=0;
    while(1)
    {
        if(i>=n)
            break;
        else
        {
            insert(T,R.key[i]);
            i++;
        }
    }
}
void TreeSearch(BiTree T,int k)
{
    BiTree p;
    p=T;
    while(p!=NULL)
    {
        if(p->data=k)
        {
            cout<<p->data;
        }
        else if(k<p->data)
        {
            p=p->lchild;
        }
        else
            p=p->rchild;
    }
}
void main()
{
    NodeType R,N;
    IdxType Idx;
    BiTree T;
    int i,x,y,z,t;
    cout<<"输入顺序表中元素个数:";
    cin>>x;
    for(i=0;i<x;i++)
    {
        cin>>R.key[i];
    }
    cout<<"输入要查找元素:";
    cin>>y;
    cout<<"顺序查找:";
    SeqSearch(R,x,y);
    cout<<"二分查找:";
    BinSearch(R,x,y);
    cout<<"输入非顺序表中元素个数:";
    cin>>t;
    for(i=0;i<t;i++)
    {
        cin>>N.key[i];
    }
    cout<<"分块查找:"<<endl;
    cout<<"建立索引表:"<<endl;
    cout<<"输入分块个数:";
    cin>>z;
    create(N,Idx,t,z);
    IdxSearch(N,Idx,y,z);
    cout<<"树状查找:"<<endl;
    creat(T,N,t);
    TreeSearch(T,y);
}
搜索更多相关主题的帖子: include 百度 动态 
2015-05-11 22:12
圈圈想学习
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-4-15
收藏
得分:0 
求大神帮忙!!!!
2015-05-11 22:17
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:10 
顺序表和二叉树不一样吧?

剑栈风樯各苦辛,别时冰雪到时春
2015-05-12 22:21
完美时空IT
Rank: 2
等 级:论坛游民
帖 子:1
专家分:10
注 册:2015-4-21
收藏
得分:10 
回复 3楼 林月儿
代码有问题。
2015-05-15 15:28
快速回复:数据结构关于二叉排序树的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017737 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved