반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 알버트
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
- 패스트캠퍼스후기
- R
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online
- 한번에끝내는Java/Spring웹개발마스터초격차패키지
- AI
- 직장인자기계발
- SKT
- 패스트캠퍼스
- 패캠챌린지
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지
- albert
- 직장인인강
Archives
- Today
- Total
제주 탈출 일지
원형 연결리스트(CLinkedList) - C++ 본문
728x90
반응형
후기. 연결리스트와 유사한 점이 많다보니, 연결리스트 이후에 짤 때 큰 어려움은 없었다.
이전 자료구조들을 template로 짰는데 단순하게 int 형으로만 테스트를 진행해서 이번에는 float형으로도 되는지 확인해봤다. string은 class라 그런지 안되는데 이유를 찾아볼 필요가 있을 것 같다. C에서도 문자열 처리는 어려웠는데 C++에서도 마찬가지인듯 싶다.
4학년 늘그막에 다시 복습을 하는 내가 초심을 잃지 않길..
CLinkedList.h
#ifndef CLINKEDLIST_H
#define CLINKEDLIST_H
template
<typename T>
class List
{
private:
typedef struct Node_
{
T data;
Node_* next;
}Node;
int numOfData;
Node* tail;
Node* cur;
Node* before;
public:
List()
{
numOfData = 0;
tail = nullptr;
cur = nullptr;
before = nullptr;
}
void LInsert(T data);
void LInsertFront(T data);
bool LFirst(T& pdata);
bool LNext(T& pdata);
T LRemove();
const int LCount()
{
return numOfData;
}
};
#endif
CLinkedList.cpp
#include "CLinkedList.h"
template
<typename T>
void List<T>::LInsert(const T data) //꼬리에 삽입
{
Node* NewNode = (Node*)malloc(sizeof(Node));
NewNode->data = data;
if (tail == nullptr)
{
tail = NewNode;
NewNode->next = tail;
}
else
{
NewNode->next = tail->next;
tail->next = NewNode;
tail = NewNode;
}
numOfData++;
}
template
<typename T>
void List<T>::LInsertFront(const T data) // 머리 == 꼬리 + 1 에 삽입
{
Node* NewNode = (Node*)malloc(sizeof(Node));
NewNode->data = data;
if (tail == nullptr)
{
tail = NewNode;
NewNode->Next = tail;
}
else
{
NewNode->next = tail->next;
tail->next = NewNode;
}
numOfData++;
}
template
<typename T>
bool List<T>::LFirst(T& pdata)
{
if (tail->next == nullptr)
{
return false;
}
else
{
before = tail;
cur = tail->next;
pdata = cur->data;
return true;
}
}
template
<typename T>
bool List<T>::LNext(T& pdata)
{
if(tail == nullptr)
{
return false;
}
before = cur;
cur = cur->next;
pdata = cur->next->data;
return true;
}
template
<typename T>
T List<T>::LRemove()
{
//예외 1 삭제할 노드가 tail 인 경우
Node* dnode = cur;
T rdata = cur->data;
if (cur == tail)
{
if (cur->next != cur)
{
before->next = dnode->next;
tail = before;
}
else //예외 2 노드가 하나만 남은 경우(노드가 하나가 남은 경우에는 cur이 tail임)
{
tail = nullptr;
}
}
before->next = dnode->next;
cur = before;
free(dnode);
numOfData--;
return rdata;
free(dnode);
}
main.cpp
#include <iostream>
using namespace std;
#include "CLinkedList.cpp"
int main()
{
List<int> CList;
cout << CList.LCount() << endl;
for (int i = 0; i < 10; i++)
{
CList.LInsert(i);
}
cout << CList.LCount() << endl;
int a;
for (int i = 0; i < 10; i++)
{
CList.LFirst(a);
cout << a << " ";
CList.LRemove();
cout << CList.LCount() << endl;
}
List<float> CListF;
for (int i = 0; i < 10; i++)
{
CListF.LInsert(i + 0.1);
}
float b;
for (int i = 0; i < 10; i++)
{
CListF.LFirst(b);
cout << b << " ";
CListF.LRemove();
cout << CListF.LCount() << endl;
}
return 0;
}
728x90
반응형
'자료구조' 카테고리의 다른 글
연결 리스트(LinkedList) - C++ (0) | 2020.09.01 |
---|---|
선형리스트(arrList) (0) | 2020.08.30 |
Comments