PDA

View Full Version : Một DSLK trỏ tới 1 DS con ?



kbt09
03-12-2008, 20:38
Mình đang làm đề tài giữa kì nhưng có 1 vấn đề vẫn chưa nghĩ ra . Ví dụ mình có 2 cấu trúc :

typedef struct DSLK
{
char info ;
DSLK *nextlist;
Node danhsachcon;
}DSLK;
DSLK *p=NULL;



typedef struct Node
{
char hoten[30];
Node *nextnode;
}Node;

Trong đó p->info chứa nội dung chữ cái đầu tiên của tên , ví dụ Nguyên Van Luc thì p->info='L' .
Việc thao tác với DSLK thì mình đã biết nhưng mình không biết truy xuất trong Node . Mong mọi người giúp đỡ .

ptaminh
04-02-2009, 12:08
Một cách để xuất là dùng List template. Tặng bạn thư viện cList của mình ().
Cách dùng tự bạn xem thêm.
mình chỉ xin ví dụ một đoạn code sau;
//////////////////////////////////////////
với bài này:
// nhập học sinh

cList<char*> hsChuT;
cList<char*> hsChuS;
cList< cList<char*>* > hsTrongLop;

hsChuT.addTail("Nguyen Van Teo");
hsChuT.addTail("Le Thi Tet");

hsChuS.addTail("Hoang Dinh Sung");
hsChuS.addTail("Le thi Suu");

hsTrongLop.addTail(&hsChuT);
hsTrongLop.addTail(&hsChuS);

// xuat danh sach hs

for( Node<cList<char*>*> * hsCungChuCai = hsTrongLop.getHead() ; hsCungChuCai ; hsCungChuCai = hsCungChuCai->pNext )
{

for( Node<char*> * pHocSinh = hsCungChuCai->info->getHead() ; pHocSinh ; pHocSinh =pHocSinh->pNext)
{
printf("%s\n",pHocSinh->info);
}
}



//////////////////////////////////////////


template<class T>
struct Node
{
T info;
Node<T> *pNext;
};

template<class T>
class cList
{
public:

cList()
{
m_pHead=NULL;
m_pTail=NULL;
m_iNode = 0;
}

~cList(){destroy();}

void addTail(const T &x)
{
Node<T> *new_ele = getNode(x);
addTail(new_ele);
}

void addHead(const T &x)
{
Node<T> *Head;
Head=getNode(x);
addHead(Head);
}

Node<T> * getHead(){ return m_pHead; }
Node<T> * getTail(){ return m_pTail; }

void destroy()
{
Node<T> *p;
for(p= m_pHead;p;)
{
m_pHead = m_pHead->pNext;
p->pNext=NULL;
delete p;
p = m_pHead;
}
m_iNode = 0;
}

int getLength() const { return m_iNode;}

protected:
Node<T> *m_pHead;
Node<T> *m_pTail;
int m_iNode;

static Node<T>* getNode(const T &x)
{
Node<T> *p;
p=new Node<T>;
if(!p)
return NULL;
p->info = x;
p->pNext=NULL;
return p;
}

void addTail(Node<T> *new_ele)
{
if(!new_ele)
return;
if(!m_pHead)
{
m_pHead = m_pTail = new_ele;
}
else
{
m_pTail->pNext=new_ele;
m_pTail=new_ele;
}
m_iNode ++;
}

void addHead(Node<T> *Head)
{
if(Head==NULL)
return ;

if(m_pTail==NULL)
m_pHead = m_pTail= Head;
else
{
Head->pNext= m_pHead;
m_pHead = Head;
}
m_iNode ++;
}

private:
};