게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
구조체를 함수로 만들면 메모리 할당을 할 수 있나요?
게시물ID : programmer_13132짧은주소 복사하기
작성자 : ㅜ_ㅠ
추천 : 0
조회수 : 412회
댓글수 : 4개
등록시간 : 2015/09/07 19:53:19
아래의 코드를 보면   구조체 안에 구조체변수가 포함된 함수인 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;

}

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호