zoukankan      html  css  js  c++  java
  • 双向链表

    #include<stdio.h>
    #include<stdlib.h>
    #include<malloc.h>
    #include<assert.h>
    
    typedef struct node
    {
        int data;
        struct node *prior;
        struct node *next;
    }NODE,*PNODE,*LINKLIST;
    
    //初始化
    void init(LINKLIST *list)
    {
        *list = (PNODE)malloc(sizeof(NODE));
        (*list)->prior=NULL;//前驱
        (*list)->next=NULL;//后继
    }
    
    //插入 到第i个位置 i>=1
    void insert(LINKLIST list,int i,int data)
    {
        PNODE p = list,q;
        //将p移动到i-1个位置
        while(--i && p)
            p=p->next;
        assert(p);//防止i的位置不合法
        q = (PNODE)malloc(sizeof(NODE));//q为插入节点
        q->data = data;
        q->next=p->next;//插入节点的后继
        q->prior = p;//插入节点的前驱
    
        if(p->next)
            p->next->prior = q;
        p->next = q;
    
    }
    
    //删除
    void del(LINKLIST list,int i,int *data)
    {
        PNODE p = list,q;
        //将p移动到i-1个位置
        while(--i && p)
            p=p->next;
        assert(p && p->next);//防止i的位置不合法
        q = p->next;
        p->next = q->next;
        if(q->next)
            q->next->prior = p;
        free(q);
    }
    
    //添加
    void add(LINKLIST list,int data)
    {
        PNODE p=list,q;
        //将p移动到最后位置
        while(p->next)
            p=p->next;
        q = (PNODE)malloc(sizeof(NODE));//q为要添加的节点
        q->data = data;
        q->next = NULL;
        q->prior = p;
        p->next = q;
    }
    
    //清空
    void clear(LINKLIST list)
    {
        PNODE p=list,q;
        p=p->next;
        while(p)
        {
            q=p->next;
            free(p);
            p=q;
        }
        list->next=NULL;
    }
    
    //销毁
    void destroy(LINKLIST *list)
    {
        PNODE p=*list,q;
        while(p)
        {
            q=p->next;
            free(p);
            p=q;
        }
        *list=NULL;
    }
    
    //打印链表
    void display(LINKLIST list)
    {
        PNODE p =list;
        assert(p);
        while(p=p->next)
        {
            printf("%d ",p->data);
        }
        printf("
    ");
    }
    
    int main()
    {
        int i,data;
        LINKLIST list;
        init(&list);
        for(i=1;i<=5;i++)
            add(list,i);
        insert(list,6,100);
        display(list);
        destroy(&list);
        system("pause");
        return 0;
    }
  • 相关阅读:
    Redis 安装
    Git的安装和使用
    HTML5 本地存储+layer弹层组件制作记事本
    PHP 微信公众号开发
    PHP 微信公众号开发
    Electron 安装与使用
    HTML5 桌面消息提醒
    Composer安装和使用
    玄 学
    区间内的真素数
  • 原文地址:https://www.cnblogs.com/dzqdzq/p/3404210.html
Copyright © 2011-2022 走看看