단일 링크 템 플 릿 클래스
/*
* List.h
*/
#ifndef _LIST_H_
#define _LIST_H_
#include <iostream>
using namespace std;
template <class TYPE>
class List
{
public:
List();
List(TYPE x[], int n);
List(const List<TYPE> *l);
~List();
void insert(const TYPE &x);
bool remove(const TYPE &x);
void display() const;
int size() const;
int at(int x, TYPE &k) const;
private:
struct ListNode
{
TYPE data;
ListNode *next;
};
ListNode *list;
void insert(ListNode *&l, const TYPE &x);
bool remove(ListNode *&l, const TYPE &x);
void display(ListNode *l) const;
int size(ListNode *l) const;
int at(ListNode *l, int x, TYPE &k) const;
};
#endif
//
template <class TYPE>
List<TYPE>::List()
{
list = new ListNode;
list->next = NULL;
}
//
template <class TYPE>
List<TYPE>::List(TYPE x[], int n)
{
list = new ListNode;
list->next = NULL;
for(int i = 0; i < n; ++i)
{
insert(list, x[i]);
}
}
//
template <class TYPE>
List<TYPE>::List(const List<TYPE> *l)
{
if(l->list == NULL)
list = NULL;
else
{
ListNode *p = l->list->next;
ListNode *pt = list = new ListNode;
while(p)
{
ListNode *q = new ListNode;
q->data = p->data;
q->next = NULL;
pt->next = q;
pt = q;
p = p->next;
}
}
}
//
template <class TYPE>
List<TYPE>::~List()
{
List *p = list->next;
while(p)
{
list->next = p->next;
free(p);
p = list->next;
}
}
//
template <class TYPE>
void List<TYPE>::insert(const TYPE &x)
{
insert(list, x);
}
// List
template <class TYPE>
void List<TYPE>::insert(ListNode *&l, const TYPE &x)
{
ListNode *node = new ListNode;
node->data = x;
node->next = l->next;
l->next = node;
}
// x , true, false
template <class TYPE>
bool List<TYPE>::remove(const TYPE &x)
{
remove(list, x);
}
template <class TYPE>
bool List<TYPE>::remove(ListNode *&l, const TYPE &x)
{
if(l == NULL)
return false;
ListNode *p = l->next;
ListNode *pre = l;
while(p && p->data != x)
{
pre = p;
p = p->next;
}
if(p)
{
pre->next = p->next;
delete p;
}
return true;
}
//
template <class TYPE>
void List<TYPE>::display() const
{
display(list);
}
template <class TYPE>
void List<TYPE>::display(ListNode *l) const
{
if(l != NULL)
{
ListNode *p = l->next;
if(p == NULL)
{
cout << " !" << endl;
return;
}
while(p)
{
cout << p->data << " ";
p = p->next;
}
}
else
cout << " !" << endl;
}
//
template <class TYPE>
int List<TYPE>::size() const
{
size(list);
}
template <class TYPE>
int List<TYPE>::size(ListNode *l) const
{
int s = 0;
if(l != NULL)
{
ListNode *p = l->next;
while(p)
{
s++;
p = p->next;
}
}
return s;
}
/*
*
* -1
* k 1
*/
template <class TYPE>
int List<TYPE>::at(int x, TYPE &k) const
{
return at(list, x, k);
}
template <class TYPE>
int List<TYPE>::at(ListNode *l, int x, TYPE &k) const
{
if(size(l) < x || x <= 0)
{
return -1;
}
else
{
int i = 0;
ListNode *p = l->next;
while(p && i < x)
{
p = p->next;
i++;
}
k = p->data;
}
return 1;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.