チェーンテーブルベースの両端キューのクラステンプレートのC++実装
3315 ワード
/*
( )
1.Createdeque n
2.cleardeque
3.f_inde(T e) e
4.f_outde()
5.l_inde(T e) e
6.l_outde
7.empty
8.length
9.display
:
1.fp
2.lp
3.len
by chczy
2017/10/16 21:34
*/
#include
#include
#include
using namespace std;
template
struct node {
node* nx;
node* pr;
T data;
};
template
class linkdeque {
public:
linkdeque();//
~linkdeque() { cout << "destroy the deque!" << endl; };
node* Createdeque(int n);// n
void cleardeque();//
node* f_inde(T e);// e
node* f_outde();//
node* l_inde(T e);// e
node* l_outde();//
bool empty();//
int length();//
void display();//
private:
node* fp;//front pointer
node* lp;//rare pointer
int len;
};
template
linkdeque::linkdeque()
{
fp = NULL;
lp = NULL;
len = 0;
}
template
node* linkdeque::Createdeque(int n)
{
len = n;
node *L = new node;
L->nx = NULL;
L->pr = NULL;
node *h = new node;
cin >> h->data;
L->nx = h;
h->pr = L;
h->nx = NULL;
fp = h;
int i = n-1;
n -= 1;
node *prev;
prev = h;
while (n--)
{
node *p = new node;
cin >> p->data;
prev->nx = p;
p->pr = prev;
p->nx = NULL;
prev = p;
if (n == 0)
lp = p;
}
return fp;
}
template
void linkdeque::cleardeque()
{
while (!empty()) l_outde();
}
template
node* linkdeque::f_inde(T e)
{
node* p=new node;
p->data = e;
p->nx = fp;
fp->pr = p;
p->pr = NULL;
fp = p;
++len;
return fp;
}
template
node* linkdeque::f_outde()
{
node *p = fp;
node *s = p->nx;
s->pr = NULL;
fp = s;
delete p;
--len;
return fp;
}
template
node* linkdeque::l_inde(T e)
{
node* p = new node;
p->data = e;
p->pr = lp;
lp->nx = p;
p->nx = NULL;
lp = p;
++len;
return lp;
}
template
node* linkdeque::l_outde()
{
node *p=lp;
node *s = p->pr;
s->nx = NULL;
lp = s;
delete p;
--len;
return p;
}
template
bool linkdeque::empty()
{
if (len == 0)
return 1;
else
return 0;
}
template
int linkdeque::length()//
{
cout << " :" << endl;
cout << len << endl;
return len;
}
template
void linkdeque::display()
{
if (len == 0)
{
cout << "no elem!" << endl;
return;
}
int i = 0;
node *p = fp;
cout << " " << len << endl;
cout << " : ";
while (i != len)
{
cout << p->data << " ";
p = p->nx;
++i;
}
cout << endl;
}