Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[6305] Re:단순연결리스트 삽입/삭제 문의 드립니다
김상면 [windyboy] 4235 읽음    2009-05-03 04:12
연결 리스트라면 상당히 어려운 작업입니다. 그러면서 알아두면 좋은 내용이기 하지만 요즘엔 컴퓨터 환경이 워낙에 좋아서 별로 다루는데가 없습니다. 아래는 템플릿 기반이고 포인터를 사용한 방법이라 상당히 난해 합니다. 연구해보시기 바랍니다.

실전에 사용하기에는 문제라기 보다는 좀 허술하다고 해야 할것 같군요.
그리고 또 한가지 워낙에 어려운 부분이라 소스가 제대로 동작 할지 모르지만 도움은 될겁니다.

#include "stdafx.h"
#include <iostream.h>
#include <malloc.h>

template <class Type>
class CList
{    typedef struct tagNode
    {    struct tagNode* m_pNext;
        Type* m_pData;
    } Node;

    Node* m_pHead;
public:
    CList()
    {    m_pHead = NULL;
    }
    ~CList()
    {    Node* pre;

        while(m_pHead)
        {    pre = m_pHead;
            m_pHead = m_pHead->m_pNext;
            free(pre);
        }
    }
    bool Insert(Type& tp);
    bool Delete(Type& tp);
    void Print();
};

template <class Type>
bool CList<Type>::Insert(Type& tp)
{    Node* node = (Node*)malloc(sizeof(Node));

    if (node)
    {    node->m_pNext = m_pHead;
        node->m_pData = &tp;
        m_pHead = node;
        return true;
    }
    return false;
}

template <class Type>
bool CList<Type>::Delete(Type& tp)
{    Node* node = m_pHead;
    Node* pre;

    while(node)
    {    if (*node->m_pData == tp)
        {    if (node == m_pHead)
                m_pHead = node->m_pNext;
            else
                pre->m_pNext = node->m_pNext;
            free(node);
            return true;
        }
        pre = node;
        node = node->m_pNext;
    }

    return false;
}

template <class Type>
void CList<Type>::Print()
{    Node* node = m_pHead;

    while(node)
    {    cout << *node->m_pData << endl;
        node = node->m_pNext;
    }
}

int main(int argc, char* argv[])
{    CList<int> list;
    int d1(1),d2(2),d3(3),d4(4);

    list.Insert(d1);
    list.Insert(d2);
    list.Insert(d3);
    list.Print();
    cout << "==============================" << endl;

    list.Delete(d1);
    list.Delete(d2);
    list.Delete(d3);
    list.Print();

    return 0;
}
그럼

김상훈 님이 쓰신 글 :
: 숫자를 삽입하고
: 삭제하고 출력을 구현하려고하는데
: 컴파일하면 에러가 안뜨는데 실행도중
: 삽입을 누르고 삽입할 숫자를 정하고 엔터키를 누르니
: 오류가 뜹니다 왜그런지 모르겠습니다 ㅜ 며칠째 이것만 잡고 헤매고 있습니다
: 도움 부탁드립니다.
:
: p.s 지금 구현한건 1번 삽입 뿐입니다
: 2번의 중간에 삽입하는거는 어떤씩으로 해야하는지 조언 부탁드릴게요
:
:
:
:
:
: #include<stdio.h>
: #include<stdlib.h>
: typedef struct ListNode{
:     int data;
:     struct ListNode *link;
: }ListNode;
: ListNode *head;
: ListNode *phead;
: ListNode *new_node;
: void insert_node(ListNode *phead, int data2, ListNode *new_node);
: void print();
:
: int main()
: {   
:     int num;
:     int data2;
:     head=(ListNode *)malloc(sizeof(ListNode));
:     head->link=NULL;
:     phead = head;
:     new_node = (ListNode *)malloc(sizeof(ListNode));
:
:
:     printf("************************\n");
:     printf("현재 단순연결리스트 출력\n\n");
:     printf("************************\n");
:     while(1)
:     {
:         printf("1. 숫자 삽입\n");
:         printf("2. 중간에 숫자 삽입\n");
:         printf("3. 숫자 삭제\n");
:         printf("4. 연결리스트 출력\n");
:         printf("5. 종료\n");
:         printf("번호를 선택하세요 : ");
:         scanf("%d",&num);
:
:         if(num==1){
:             printf("삽입 숫자를 입력해주세요 : ");
:             scanf("%d",&data2);
:             insert_node(phead, data2, new_node);
:         }
:
:     }
: }
: void insert_node(ListNode *phead, int data2, ListNode *new_node)
: {
:
:     if(phead == NULL){
:         new_node->link = NULL;
:         new_node->data = data2;
:         phead = new_node;
:     }
:     else{
:         new_node->link=NULL;
:         new_node->data=data2;
:         phead=new_node;
:     }
:
:    
:     printf("\n\n---------------------------------------------------");
:     printf("\n현재까지 입력된 숫자는\n");
:   
:     while(phead != NULL)
:     {
:     printf("%d  \t",phead->link->data);
:     phead=phead->link;
:     printf("\n\n---------------------------------------------------\n");
:     }
: }

+ -

관련 글 리스트
6304 단순연결리스트 삽입/삭제 문의 드립니다 김상훈 3991 2009/05/02
6305     Re:단순연결리스트 삽입/삭제 문의 드립니다 김상면 4235 2009/05/03
6306         Re:Re:단순연결리스트 삽입/삭제 문의 드립니다 Lyn 2957 2009/05/04
6307             Re:Re:Re:단순연결리스트 삽입/삭제 문의 드립니다 김상면 3057 2009/05/05
6308                 Re:Re:Re:Re:단순연결리스트 삽입/삭제 문의 드립니다 Lyn 3384 2009/05/05
6309                     Re:Re:Re:Re:Re:단순연결리스트 삽입/삭제 문의 드립니다 김상면 2834 2009/05/05
6311                         Re:Re:Re:Re:Re:Re:단순연결리스트 삽입/삭제 문의 드립니다 Lyn 3277 2009/05/05
6312                             Re:Re:Re:Re:Re:Re:Re:단순연결리스트 삽입/삭제 문의 드립니다 김상면 7392 2009/05/05
6313                                 Re:Re:Re:Re:Re:Re:Re:Re:단순연결리스트 삽입/삭제 문의 드립니다 Lyn 5179 2009/05/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.