首页 > 其他 > 详细

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

时间:2019-06-28 13:06:35      阅读:91      评论:0      收藏:0      [点我收藏+]
#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;
}

 

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

原文:https://www.cnblogs.com/nnyst/p/11101956.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!