연결 리스트라면 상당히 어려운 작업입니다. 그러면서 알아두면 좋은 내용이기 하지만 요즘엔 컴퓨터 환경이 워낙에 좋아서 별로 다루는데가 없습니다. 아래는 템플릿 기반이고 포인터를 사용한 방법이라 상당히 난해 합니다. 연구해보시기 바랍니다.
실전에 사용하기에는 문제라기 보다는 좀 허술하다고 해야 할것 같군요.
그리고 또 한가지 워낙에 어려운 부분이라 소스가 제대로 동작 할지 모르지만 도움은 될겁니다.
#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");
: }
: }
|