C++技巧:C++雙向循環(huán)鏈表的操作與實(shí)現(xiàn)

字號(hào):

// 雙向循環(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;
    }