아래의 코드를 보면 구조체 안에 구조체변수가 포함된 함수인 node가 있는데요.
struct node{
node(int k,struct node *ll,struct node *rr)
{
key=k;
l=ll;
r=rr;
}
int key;
struct node *l,*r;
};
그런데 x=new node(v,z,z);로 node함수를 메모리로 할당한 것 같은데
이렇게 함수를 동적으로 메모리에 할당 할 수 있나요?
그냥 x=new node라면 구조체 node형을 메모리할당하는 것으로 이해할 수 있지만
new node(v,z,z);는 도대체 어떤 데이터형을 메모리로 할당하는 지 알 수 없네요.
그리고 구조체 선언 안에 구조체 변수인 struct node *l,*r;와 구조체 변수를 인수로 받는 함수가 포함되어 있는 복잡한 구조체인데 node구조체 변수를 만들면 node구조체 안의 어떤 변수들이 만들어지는지 전혀 파악되지 않네요.ㅡ.ㅡ
함수 node(int k,struct node *ll,struct node *rr)이 어째서 메모리에 할당할 수 있는지 그리고 위의 struct node구조체는 변수를 만들면 메모리에 어떤식으로 변수들이 저장되는지 알고 싶네요.
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
const int N=10;
class Dict{
public:
Dict(){
z=new node(0,0,0);
z->l=z;
z->r=z;
head=new node(0,0,z);
}
int search(int search_key);
void insert(int v);
private:
struct node{
node(int k,struct node *ll,struct node *rr)
{
key=k;
l=ll;
r=rr;
}
int key;
struct node *l,*r;
};
struct node *head,*z;
};
int Dict::search(int search_key)
{
struct node *x=head->r;
while(x!=z)
{
if(x->key==search_key)
return x->key;
x=(x->key>search_key)?x->l:x->r;
}
return -1;
}
void Dict::insert(int v)
{
struct node *p,*x;
p=head;
x=head->r;
while(x!=z)
{
p=x;
if(x->key==v)
return;
x=(x->key>v)?x->l:x->r;
}
x=new node(v,z,z);
if(p->key>v)
p->l=x;
else p->r=x;
}
void init (int key[],int search_key[])
{
int i,index,temp[N+1];
for(i=1;i<=N;i++)
{
key[i]=i;
search_key[i]=i;
temp[i]=0;
}
srand(time(NULL));
for(i=1;i<=N;i++){
index=rand()%N+1;
if(temp[index]==0)
temp[index]=key[i];
else{
while(temp[index]!=0)
index=(index%N)+1;
temp[index]=key[i];
}
}
for(i=1;i<=N;i++){
key[i]=temp[i];
}
}
int main()
{
Dict d;
int i,result,key[N+1],search_key[N+1];
double start_time;
init(key,search_key);
for(i=1;i<=N;i++)
d.insert(key[i]);
start_time=clock();
for(i=1;i<=N;i++)
{
result=d.search(search_key[i]);
if(result==-1||result!=search_key[i]){
cout<<"탐색오류."<<endl;
}
}
cout<<"이진 트리 탐색의 실행시간(N="<<N<<"):"<<clock()-start_time<<endl;
cout<<"탐색 완료"<<endl;
}
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.