연결리스트에 대한 질문입니다...
글쓴이: ch0nn0m / 작성시간: 일, 2009/08/30 - 12:06오후
채팅방을 만들고 귓말까지 가능한걸 만들어 보려다가...
연결리스트를 사용해보려 했는데...아직 연결리스트에 대한 이해가 많이 부족한것 같더라구요...
그래서 C로 어떻게 돌아가는지 만들어 보려는데 이해가 잘안가네요...
밑에와 같이 단일연결리스트를 구성했는데요...각각의 채널안에 유저를 저장하구...
각채널마다의 저장된 유저를 출력해보고 싶은데요...자꾸 이상하네요...
소스코드 일부만을 올려놓았습니다...혹시 어디가 문제인지...?
typedef struct _user { char u_name[20]; struct _user *u_next; }user; user *u_head, *u_tail; typedef struct _channel { int user_count; char channel_name[20]; struct _channel *c_next; struct _user *user; }channel; channel *c_head, *c_tail; void init_user(void) { u_head=(user*)malloc(sizeof(user)); u_tail=(user*)malloc(sizeof(user)); u_head->u_next=u_tail; u_tail->u_next=u_tail; } void init_channel(void) { c_head=(channel*)malloc(sizeof(channel)); c_tail=(channel*)malloc(sizeof(channel)); c_head->c_next=c_tail; c_tail->c_next=c_tail; } //문자열을 받아와서 채널생성 void create_channel(char *s) { printf("새로운 채널 생성했습니다\n"); channel *t; t=(channel*)malloc(sizeof(channel)); strcpy(t->channel_name,s); t->c_next=c_head->c_next; c_head->c_next=t; t->user_count=0; } //유저와 채널이름을 받아서 실행하는 함수 //같은 채널이라면 그 채널안의 구조체에 연결된 유저이름에 저장 void have_channel(char *ur_name,char *cl_name) { user *t; channel *p; p=(channel*)malloc(sizeof(channel)); p=c_head->c_next; p->user=(user*)malloc(sizeof(user)); while(strcmp(cl_name,p->channel_name) !=0 && p!=c_tail) { p=p->c_next; } p->user_count++; strcpy(p->user->u_name,ur_name); p->user->u_next=u_head->u_next; u_head->u_next=p->user; } //채널정보검색 printf("정보를 알고 싶은 채널 : \n"); fgets(buf,20,stdin); buf[(strlen(buf)-1)]='\0'; channel *p; user *t; p=c_head->c_next; p->user=u_head->u_next; while(strcmp(buf,p->channel_name) !=0 && p!=c_tail) { p=p->c_next; } if(p==c_tail) { printf("찾으시는 채널이 없습니다\n"); return 1; } while(p->user_count--) { printf("%s\n",p->user->u_name); p->user=p->user->u_next; }
Forums:
모든 channel 이 하나의
모든 channel 이 하나의 user 리스트를 공유하게 만들어지는듯 합니다.
user 정보를 저장하는 자료구조가 channel 별로 만들어지지 않고 전역으로 만들어지고 있네요.
실력없는 제가 보기엔 자료구조 설계부터 다시 하셔야 할듯....
댓글 달기