数据结构-双向列表(增删改查)

#include<stdio.h>
#include<malloc.h> 

//双向链表的结构体 
typedef struct  DNode{
    int data;
    struct DNode *prior;
    struct DNode *next;
}DNode,*DLinkList; 

//双向链表的创建操作
void createList(DLinkList &L){
    DLinkList s,p;//用来存放新的节点信息
    L = (DLinkList)malloc(sizeof(DNode));
    L->prior = NULL;
    L->next = NULL;
    p = L;
    int x;//用来接收新的值
    scanf("%d",&x); 
    while(x!=-1){
        s = (DLinkList)malloc(sizeof(DNode));
        s->data = x;
        p->next = s;
        s->prior = p;
        p = s;
        scanf("%d",&x);
    }
    p->next = NULL;
}

//查找元素(按序号查找) 
DLinkList  findById(DLinkList L,int n) {
    int j = 1;
    DLinkList p = L->next;
    if(n==0){
        return L;
    }
    while(p&&j<n){
        p = p->next;
        j++;
    }
    return p;
} 

//删除元素(按序号删除)
void deleteList(DLinkList &L,int i){
    DLinkList p = (DLinkList)malloc(sizeof(DNode));
    DLinkList s;
    p =  findById(L,i-1);
    s = p->next;
    p->next = s->next;
    s->next->prior = p;
    free(s);
} 
//插入元素(按序号插入)
void insertList(DLinkList &L,int i,int e){
    DLinkList p = findById(L,i-1);
    DLinkList s = (DLinkList)malloc(sizeof(DNode));
    s->data = e;
    s->next = p->next;
    s->prior = p;
    p->next =s; 
    p->next->prior = s;
} 
 
//显示链表中的元素
void show(DLinkList L){
    DLinkList p = L->next;
    while(p){
        printf("%d    ",p->data);
        p = p->next;
    }
} 




int main(){
    DLinkList L,find;
    
    createList(L);
//    show(L);
    //测试查找方法 
//    find = findById(L,3);
//    printf("%d",find->data); 

//    deleteList(L,3);
//    show(L);
    
    insertList(L,3,9999);
    show(L);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/nnyst/p/11101956.html