// 雙向循環(huán)鏈表的操作與實(shí)現(xiàn)...
// 網(wǎng)上關(guān)于這方面的挺多,由于自己以前上課沒(méi)好好學(xué)數(shù)據(jù)結(jié)構(gòu),現(xiàn)在重新認(rèn)識(shí)數(shù)據(jù)結(jié)構(gòu),
// 以下是自己寫(xiě)的基于C++的雙向循環(huán)鏈表的創(chuàng)建及其一些操作與實(shí)現(xiàn)(于VC下通過(guò)),沒(méi)用模板,
// 也沒(méi)用類(lèi),所以比較適合有一點(diǎn)C++語(yǔ)言基礎(chǔ)入門(mén)者,但可移植不夠.有什么bug的話(huà),歡迎指出。
// 或有什么問(wèn)題也可以聯(lián)系我。
// made by virgil (2009.2.8)
// MSN:hangyu_628@hotmail.com)
#include
#include
using namespace std;
int N=10;
struct Node
{
char name[20];
Node *llink,*rlink;
};
Node* Create(int n)
{
Node *h,*p,*s; //h:頭結(jié)點(diǎn),p:下一結(jié)點(diǎn),s:當(dāng)前結(jié)點(diǎn)
int i;
if((h=new Node)==NULL)
{
cout<<"分配內(nèi)存失敗..."< }
h->name[0]=0;
h->llink=NULL;
h->rlink=NULL;
p=h;
for (i=0;i!=n;++i)
{
if((s=new Node)==NULL)
{
cout<<"分配內(nèi)存失敗..."< }
p->rlink=s;
cout<<"請(qǐng)輸入第"< cin>>s->name;
s->llink=p;
s->rlink=NULL;
p=s;
}
s->rlink=h;
h->llink=s;
return h;
}
Node* Search(Node* h,const char* name)
{
Node *p=h->rlink;
for (int i=0;i!=N;++i)
{
if (strcmp(p->name,name)==0)
{
return p;
}
p=p->rlink;
}
return p;
}
void Insert(Node *p)
{
Node *s=new Node;
cout<<"請(qǐng)輸入要插入的姓名:";
cin>>s->name;
Node *r=p->rlink; //結(jié)點(diǎn)示意 p->s->r(s為插入的結(jié)點(diǎn))
p->rlink=s;
s->llink=p;
r->llink=s;
s->rlink=r;
++N;
}
void Delete(Node *p)
{
Node *l=p->llink; //結(jié)點(diǎn)示意 l->p->r (p為要?jiǎng)h除的結(jié)點(diǎn))
Node *r=p->rlink;
l->rlink=r;
r->llink=l;
delete p;
--N;
}
void Display(Node *h)
{
Node *p;
p=h->rlink;
for (int i=0;i!=N;++i)
{
cout<<"第"<name< // delete p;
p=p->rlink;
}
}
int main()
{
Node *head,*pSearch;
int number=N;
char strName[20];
head=Create(number);
cout< cout<<"你創(chuàng)建的結(jié)構(gòu)如下:"< Display(head);
cout< //查找并插入...
cout<<"請(qǐng)輸入你要查找的人的姓名:";
cin>>strName;
pSearch=Search(head,strName);
cout<<"你所要查找的人的姓名是: "<name< cout< Insert(pSearch);
cout<<"插入后的結(jié)果如下:"< Display(head);
cout< //查找并刪除...
cout<<"輸入你要?jiǎng)h除的結(jié)點(diǎn): ";
cin>>strName;
pSearch=Search(head,strName);
Delete(pSearch);
cout<<"刪除后的結(jié)果如下:"< Display(head);
cout< return 0;
}
// 網(wǎng)上關(guān)于這方面的挺多,由于自己以前上課沒(méi)好好學(xué)數(shù)據(jù)結(jié)構(gòu),現(xiàn)在重新認(rèn)識(shí)數(shù)據(jù)結(jié)構(gòu),
// 以下是自己寫(xiě)的基于C++的雙向循環(huán)鏈表的創(chuàng)建及其一些操作與實(shí)現(xiàn)(于VC下通過(guò)),沒(méi)用模板,
// 也沒(méi)用類(lèi),所以比較適合有一點(diǎn)C++語(yǔ)言基礎(chǔ)入門(mén)者,但可移植不夠.有什么bug的話(huà),歡迎指出。
// 或有什么問(wèn)題也可以聯(lián)系我。
// made by virgil (2009.2.8)
// MSN:hangyu_628@hotmail.com)
#include
#include
using namespace std;
int N=10;
struct Node
{
char name[20];
Node *llink,*rlink;
};
Node* Create(int n)
{
Node *h,*p,*s; //h:頭結(jié)點(diǎn),p:下一結(jié)點(diǎn),s:當(dāng)前結(jié)點(diǎn)
int i;
if((h=new Node)==NULL)
{
cout<<"分配內(nèi)存失敗..."<
h->name[0]=0;
h->llink=NULL;
h->rlink=NULL;
p=h;
for (i=0;i!=n;++i)
{
if((s=new Node)==NULL)
{
cout<<"分配內(nèi)存失敗..."<
p->rlink=s;
cout<<"請(qǐng)輸入第"< cin>>s->name;
s->llink=p;
s->rlink=NULL;
p=s;
}
s->rlink=h;
h->llink=s;
return h;
}
Node* Search(Node* h,const char* name)
{
Node *p=h->rlink;
for (int i=0;i!=N;++i)
{
if (strcmp(p->name,name)==0)
{
return p;
}
p=p->rlink;
}
return p;
}
void Insert(Node *p)
{
Node *s=new Node;
cout<<"請(qǐng)輸入要插入的姓名:";
cin>>s->name;
Node *r=p->rlink; //結(jié)點(diǎn)示意 p->s->r(s為插入的結(jié)點(diǎn))
p->rlink=s;
s->llink=p;
r->llink=s;
s->rlink=r;
++N;
}
void Delete(Node *p)
{
Node *l=p->llink; //結(jié)點(diǎn)示意 l->p->r (p為要?jiǎng)h除的結(jié)點(diǎn))
Node *r=p->rlink;
l->rlink=r;
r->llink=l;
delete p;
--N;
}
void Display(Node *h)
{
Node *p;
p=h->rlink;
for (int i=0;i!=N;++i)
{
cout<<"第"<name<
p=p->rlink;
}
}
int main()
{
Node *head,*pSearch;
int number=N;
char strName[20];
head=Create(number);
cout<
cout<
cout<<"請(qǐng)輸入你要查找的人的姓名:";
cin>>strName;
pSearch=Search(head,strName);
cout<<"你所要查找的人的姓名是: "<
cout<<"插入后的結(jié)果如下:"<
cout<
cout<<"輸入你要?jiǎng)h除的結(jié)點(diǎn): ";
cin>>strName;
pSearch=Search(head,strName);
Delete(pSearch);
cout<<"刪除后的結(jié)果如下:"<
cout<
}