用类做双向链表的各种操作。在类Liste中,定义了函数ajouter,ajouter是法语添加的意思。
void Liste::ajouter(const string& s){
Element *e = new Element(s);
if (premier==NULL)
{premier=dernier=e;}
else {
e->precedent=dernier;
dernier ->suivant = e;
dernier=e;
}
}然后在main()中,我建个对象,叫person,我要在person里添加两个字符串结点,"Baleze Bruno","Costaud Claude",在main()中如何写这段程序呢?谢谢?
void Liste::ajouter(const string& s){
Element *e = new Element(s);
if (premier==NULL)
{premier=dernier=e;}
else {
e->precedent=dernier;
dernier ->suivant = e;
dernier=e;
}
}然后在main()中,我建个对象,叫person,我要在person里添加两个字符串结点,"Baleze Bruno","Costaud Claude",在main()中如何写这段程序呢?谢谢?
person.ajouter(_T("aaa"));
person.ajouter(_T("bbb"));
--------------------liste.h------------
#ifndef LISTE_H
#define LISTE_H
#include <string>
using namespace std;class Element;
class Iterateur;class Liste
{
public:
// constructeur构造函数
Liste();
// ajouter s a la fin de la liste 加S到表结尾
void ajouter(const string& s);
// ajouter s avant la position pos 加S到位置POS前
void inserer(Iterateur& pos, const string& s);
// supprimer l'element a la position 删除POS这个元素
void supprimer(Iterateur& pos);
// la premiere position 每一个位置 debut是开始的意思
Iterateur debut() const;
// la fin de la liste (apres la derniere position) 表结尾,在最后一个位置后。fin是结尾的意思
Iterateur fin() const;
//afficher tous les elements
void Liste::afficher(Iterateur & pos);
private:
// pointeurs vers le premier第一 et le dernier最后 element 指向第一和最后元素的指针
Element* premier;
Element* dernier;
};
class Iterateur
{
public:
// constructeur
Iterateur();
// retourne la valeur dans cette position返回这个位置的值
string& get() const;
// avance a la position suivante前一个位置
void suivant();
// recule a la position precedente向后一个位置
void precedent();
// compare deux iterateurs对比两个ITERATOR
bool egal(const Iterateur& b) const;
private:
// pointeur vers l'element courant 指向一般元素的指针
Element* position;
// pointeur vers le dernier element de la liste指向最后一个元素的指针
Element* dernier;friend class Liste;
};#endif
----------------------liste.cc-----------------------------
#include "liste.h"
#include <string>
#include <iostream>
using namespace std;class Element
{
public:
// constructeur 构造函数
Element(const string& s);
private:
string valeur;
// pointeurs vers les voisins 指向前后邻居的指针
Element* precedent;
Element* suivant;
friend class Liste;
friend class Iterateur;
};
Element::Element(const string& s)
{ valeur = s;
precedent = suivant = NULL;
}
Iterateur::Iterateur()
{ position = dernier = NULL;
}
string& Iterateur::get() const
{ return position->valeur;
}
void Iterateur::suivant()
{ position = position->suivant;
}
void Iterateur::precedent()
{ if (position == NULL) // fin de la liste 表结尾
position = dernier;
else
position = position->precedent;
}
bool Iterateur::egal(const Iterateur& b) const
{ return position == b.position;
}
Liste::Liste()
{ premier = dernier = NULL;
}
Iterateur Liste::debut() const
{ Iterateur it;
it.position = premier;
it.dernier = dernier;
return it;
}
Iterateur Liste::fin() const
{ Iterateur it;
it.position = NULL;
it.dernier = dernier;
return it;
}//creation de l'Elt a partir de la valeur 创建一个元素
Element::Element *e(const string& s)
{ Element *e= new Element(s);}// ajouter s a la fin de la liste 加到表结尾
void Liste::ajouter(const string& s){
Element *e = new Element(s);
if (premier==NULL)
{premier=dernier=e;}
else {
e->precedent=dernier;
dernier ->suivant = e;
dernier=e;
}
} // ajouter s avant la position pos 加到表位置pos前
void Liste::inserer(Iterateur& pos, const string& s){
Element *e = new Element(s);
if (premier==NULL)
{premier=dernier=e;}
else { if (pos.position==premier){
pos.position->precedent=e;
e->suivant=pos.position;
premier=e;
}
else {
pos.position->precedent->suivant=e;
e->precedent=pos.position->precedent;
pos.position->precedent=e;
e->suivant=pos.position;
}
}
}// supprimer l'element a la position pos 在表位置pos前删除那个元素
void Liste::supprimer(Iterateur& pos){
if (premier==NULL)
{cout<<"la liste is null!"<<endl;}
else {if (pos.position==premier){
premier=NULL;
premier=premier->suivant;}
else {if (pos.position==dernier){
dernier=NULL;
dernier=dernier->precedent;}
else {pos.position->precedent=pos.position->suivant->precedent;
pos.position->suivant->precedent=pos.position->precedent->suivant;
pos.position=NULL;
pos.position=pos.position->precedent;}
}
}
}
----------------------------------
如何做个main()来实现加入结点元素"Baleze Bruno","Costaud Claude","Doue Damien","Vaillant Veronique",
加一个元素"Sage Stephane"在第四个位置,
删除第二个位置的元素,
显示所有结点元素?
------------------------------------
谢谢了,卡在这里,实在不会了。