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