当前位置:编程学习 > C/C++ >>

双链表的插入 删除

双链表其实 也没什么 只是多了一个前置链而已

双链表的定义

[cpp] 
struct DNode 

    int data; 
    struct DNode *next; 
    struct DNode *pre; 
}; 
 

单链表的定义

[cpp] view plaincopy
struct DNode 

    int data; 
    struct DNode *next; 
}; 

其他的可以看上一篇博客  大致相同

[cpp]
#ifndef HEAD_H 
#define HEAD_H 
#include <iostream> 
using namespace std; 
#include <cassert> 
#include <cstdlib> 
#include <cmath> 
#include <sstream> 
#include <fstream> 
#include <string> 
#include <algorithm> 
#include <list> 
#include <queue> 
#include <vector> 
#include <deque> 
#include <stack> 
#include <bitset> 
#include <set> 
#include <map> 
#endif 
 
struct DNode 

    int data; 
    struct DNode *next; 
    struct DNode *pre; 
}; 
 
 
DNode *Creat() 
{   www.zzzyk.com
    DNode *head,*p,*s; 
    head=(DNode *)malloc(sizeof(DNode)); 
    p=head; 
    int temp; 
    while (cin>>temp&&temp) 
    { 
        s=(DNode *)malloc(sizeof(DNode)); 
        s->data=temp; 
        p->next=s; 
        s->pre=p; 
        p=s; 
    } 
    head=head->next; 
    p->next=NULL; 
    head->pre=NULL; 
    return (head); 

 
DNode *Insert(DNode *&head,int num) 

    DNode *p,*s; 
    s=(DNode *)malloc(sizeof(DNode)); 
    s->data=num; 
    p=head; 
    while (NULL!=p->next&&num>p->data) 
    { 
        p=p->next; 
    } 
    if (num<=p->data) 
    { 
        if (NULL==p->pre) 
        { 
            s->next=head; 
            head->pre=s; 
            head=s; 
            head->pre=NULL; 
        }  
        else 
        { 
            s->pre=p->pre; 
            p->pre->next=s; 
            s->next=p; 
            p->pre=s; 
        } 
    }  
    else 
    { 
        p->next=s; 
        s->pre=p; 
        s->next=NULL; 
    } 
    return(head); 

 
DNode *Del(DNode *&head,int num) 

    DNode *p; 
    p=head; 
    while (NULL!=p->next&&num!=p->data) 
    { 
        p=p->next; 
    } 
    if (num==p->data) 
    { 
        if (NULL==p->pre) 
        { 
            head=p->next; 
            p->next->pre=head; 
            free(p); 
        }  
        else if (NULL==p->next) 
        { 
            p->pre->next=NULL; 
            free(p); 
        } 
        else 
        { 
            p->pre->next=p->next; 
            p->next->pre=p->pre; 
            free(p); 
        } 
    }  
    else 
    { 
        cout<<num<<" cound not be found"<<endl; 
    } 
    return head; 

 
void Display(DNode *head) 

    DNode *p; 
    p=head; 
    while (NULL!=p) 
    { 
        cout<<(p->data)<<" "; 
        p=p->next; 
    } 
    cout<<endl; 

 

[cpp]
#include "head.h" 
 
int main() 

    DNode *head; 
    head=Creat(); 
    Display(head); 
#ifndef DEBUG 
    cout<<"please input an num to insert:"; 
#endif 
    int insert_num; 
    while (cin>>insert_num&&insert_num) 
    { 
        Insert(head,insert_num); 
        Display(head); 
    } 
#ifndef DEBUG 
cout<<"please input an number to delete:"; 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,