연결리스트 구현을 할려고 합니다.
그런데
class list { class node { 쏼라; }
쏼라; }
이런식의 클래스 생성 괜찮을까요??
뭔가 지저분하고 뭔가 아닌듯한 느낌이 드는데 머릿속에서 떠오르는 가장 간단한 방법인듯하기도 하고요,...
우려먹기... ㅡ_ㅡ;;;
typedef struct _QUEUE { char data[10]; int idx; struct _QUEUE* pre; struct _QUEUE* next; }NODE; class CQUEUE { public: CQUEUE(); ~CQUEUE(){}; NODE* first; NODE* last; int m_cnt; void fn_push_front(); void fn_push_back(); void fn_pop_front(); void fn_pop_back(); void fn_view(); void fn_delete(int idx); }; CQUEUE::CQUEUE() { m_cnt = 0; first = NULL; last = NULL; } void CQUEUE::fn_view() { if(m_cnt == 0) return ; NODE* node = first; //첫 노드부터 시작 int i=0; for(i=0; i<m_cnt; i++) { // //s qDebug() << node->data; node = node->next; //다음 노드 if(node == NULL) return; } } void CQUEUE::fn_push_back() { NODE* node = (NODE*) malloc(sizeof(NODE)); if(m_cnt == 0) { node->pre = NULL; //노드 앞이 NULL first = node; //처음 노드 저장 } else if(m_cnt > 0) { node->pre = last; //노드 앞을 알려주기 node->pre->next = node; //노드 앞의 뒤가 자신임을 알려주기 } node->next = NULL; node->idx = m_cnt; sprintf(node->data, "node%d", m_cnt); // strcpy(node->data, "node"); last = node; //마지막 노드 m_cnt++; } void CQUEUE::fn_pop_back() { if(m_cnt == 0) return; free(last); last = NULL; m_cnt--; } void CQUEUE::fn_push_front() { } void CQUEUE::fn_pop_front() { } void CQUEUE::fn_delete(int idx) { if(m_cnt == 0) return ; NODE* node = first; //첫 노드부터 시작 int i=0; for(i=0; i<m_cnt; i++) { if(i == idx) { //s qDebug() << "delete - " << node->data; //if first if(i == 0) { if(node->next) { first = node->next; node->next->pre = NULL; } else { first = NULL; } free(node); node = NULL; m_cnt--; break; } //if last else if(i == m_cnt-1) { if(node->pre) { node->pre->next = NULL; last = node->pre; } free(node); node = NULL; m_cnt--; break; } //else all else { node->pre->next = node->next; if(node->next) { node->next->pre = node->pre; } free(node); node = NULL; m_cnt--; break; } } // node = node->next; //다음 노드 if(node == NULL) return; } } // CQUEUE queue; int i=0; for(i=0; i<100000; i++) { queue.fn_push_back(); } for(i=0; i<100000; i++) { queue.fn_delete(i); } queue.fn_view();
---------------------------------------------------------------------------- 젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다. 정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
노드와 리스트간의 관계만 확실하다면 문제없습니다.
중요한 것은 의미나 관계지, 보이는 모양이 아니니까요.
------------------------------ How many legs does a dog have?
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
저는 요렇게 만들었습니다. ㅇ_ㅇ'''
우려먹기... ㅡ_ㅡ;;;
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
노드와 리스트간의 관계만 확실하다면
노드와 리스트간의 관계만 확실하다면 문제없습니다.
중요한 것은 의미나 관계지, 보이는 모양이 아니니까요.
------------------------------
How many legs does a dog have?
댓글 달기