양방향 체인 시계의 몇 가지 실현

#pragma once
#include<iostream>
using namespace std;
typedef int DataType;
// 
struct Node
{
	Node(const DataType& d)
	:_data(d)
	, _prev(NULL)
	, _next(NULL)
	{}
	Node* _next;
	Node* _prev;
	DataType _data;
};
// 
class DList
{
friend ostream& operator<<(ostream& os,DList& d);
public:
	DList()// 
		:_head(NULL)
		,_tail(NULL)
	{}
	~DList()// 
	{
		Node* cur = _head;
		while (cur)
		{
			Node* del = cur;
			cur = cur->_next;
			delete del;
		}
	}
public:
	void PushBack(const DataType& d);// 
	void PushFront(const DataType& d);// 
	void PopBack();// 
	void PopFront();// 
	void Find(const DataType& d);// 
	void Insert(const DataType& d);// 
	void BubbSort();// 
	void Reverse();// 
	void Remove(const DataType& d);// 
	void RemoveAll(const DataType& d);// 
	void Erase(Node* pos);// 
private:
	Node* _head;// 
	Node* _tail;// 
};

#include"DList.h"
ostream &operator<<(ostream &os, Dlist&d)//출력 연산자 다시 로드
{
Node*cur = d._head;
while (cur)
{
os << cur->_data <<"<=>";
cur = cur->_next;
}
os <<"over";
return os;
}
void DList::PushBack(const DataType& d)
{
Node* newNode = new Node(d);
if (_head == NULL)
{
_head = newNode;
_tail = _head;
}
else
{
_tail->_next = newNode;
newNode->_prev = _tail;
_tail = newNode;
}
}
void DList::PushFront(const DataType& d)
{
Node* newNode = new Node(d);
if (_head == NULL)
{
_head = newNode;
_tail = _head;
}
else
{
newNode->_next = _head;
_head->_prev = newNode;
_head = newNode;
}
}
void DList::PopBack()
{
if (_head == NULL)
{
return;
}
else if (_head == _tail)
{
delete _head;
_head = NULL;
_tail = NULL;
}
else
{
_tail = _tail->_prev;
delete _tail->_next;
_tail->_next = NULL;
}
}
void DList::PopFront()
{
if (_head = NULL)
{
return;
}
else if (_head == _tail)
{
delete _head;
_head = NULL;
_tail = NULL;
return;
}
else
{
Node* del = _head;
_head = _head->_next;
_head->_prev = NULL;
delete del;
}
}
#include"DList.h"
void test1()
{
DList l1;
l1.PushBack(1);
l1.PushBack(2);
l1.PushBack(3);
l1.PushBack(4);
cout << l1 << endl;
l1.PopBack();
l1.PopBack();
cout << l1 << endl;
l1.PopBack();
l1.PopBack();
l1.PopBack();
cout << l1 << endl;
}
int main()
{
test1();
getchar();
return 0;
}

좋은 웹페이지 즐겨찾기