zoukankan      html  css  js  c++  java
  • 第一章 线性结构双向链表

    哔哩哔哩数据结构讲解地址:https://space.bilibili.com/356198029

    本代码视频讲解地址:https://www.bilibili.com/video/av62218948

    #include <stdio.h>
    #include <stdlib.h>
    typedef struct node
    {
        int data; //数据
        struct node *front;//指向上一个结点
        struct node *next;//指向下一个结点
    } Node;
    Node* init()
    {
        Node *first = (Node*)malloc(sizeof(Node));
        first->data = -1;
        //第一个结点的前地址 指向最后一个元素 看到后面你就明白了为什么这么做
        first->front = first; //第一个元素的头指向最后一个元素 也可以为空 都行
        first->next = NULL;
        return first;
    }
    void Add(Node* List,int data)
    {
        Node* temp_List = List;
        while(temp_List->next)
            temp_List = temp_List->next;
        Node* new_Node = (Node*)malloc(sizeof(Node)); //申请内存
        new_Node->data = data;
        new_Node->front = temp_List;//指向上一个结点
        new_Node->next = NULL;//下一个结点为空
        temp_List->next = new_Node;//上一个结点的next 为新结点的地址
        List->front = new_Node;//将头结点的最后一个元素地址更新
    }
    void Show(Node* List)
    {
        Node* temp_List = List;
        printf("List = [");
        while(temp_List->next)
        {
            temp_List = temp_List->next;
            printf("%d, ",temp_List->data);
        }
        printf("]\n");
    }
    void ReverseShow(Node* List)
    {
        Node* temp_List = List->front;//让temp指针指向最后一个元素
        printf("ReverseList = [");
        while(temp_List->front != List->front)
        {
            printf("%d, ",temp_List->data);
            temp_List = temp_List->front;
        }
        printf("]\n");
    }
    void Delete(Node* List,int del_data)
    {
        Node* temp_List = List;
        while(temp_List->data != del_data&&temp_List->next)
            temp_List = temp_List->next;
        if(temp_List->data == del_data){
            //改变temp 前后的指针
            temp_List->front->next = temp_List->next;
            temp_List->next->front = temp_List->front;
            free(temp_List);
        }
        else printf("未查找到\n");
    
    }
    void Insert(Node* List,int index,int data)
    {
        Node* temp_List = List;
        while(index--&&temp_List->next)
            temp_List = temp_List->next;
        Node* new_Node = (Node*)malloc(sizeof(Node));//新结点
        //一堆指针指来指去(重要考点!!!!!)
        new_Node->data = data;
        new_Node->next = temp_List->next;
        new_Node->front = temp_List;
        temp_List->next = new_Node;
        new_Node->next->front = new_Node;
    
    }
    void Select(Node* List,int index);//自己完成查找
    void Alter(Node* List,int data,int index);//自己完成修改
    int main()
    {
        Node* List_First;
        List_First = init();
        printf("%d\n",List_First->data);//检测初始化是否成功
    
        Add(List_First,5);
        Add(List_First,4);
        Add(List_First,6);
        Add(List_First,8);
        Add(List_First,9);
        Add(List_First,1);
        Add(List_First,2);
        Show(List_First);
        ReverseShow(List_First);
        Delete(List_First,6);
        printf("--------删除后-----------\n");
        Show(List_First);
        ReverseShow(List_First);
    
        Insert(List_First,2,100);
        Insert(List_First,4,888);
        printf("--------插入后-----------\n");
        Show(List_First);
        ReverseShow(List_First);
        return 0;
    }
  • 相关阅读:
    Vue's Demo
    安装informatic过程中的错误
    linux系统字符集
    netstat
    查看linux系统的信息
    以太坊私有链的搭建
    $0 $1
    WordPaster-Joomla_3.4.7-tinymce 4.1.7示例发布
    Joomla3x-CKEditor4x-WordPaster整合示例
    Firefox 43无法安装xpi的问题
  • 原文地址:https://www.cnblogs.com/xwxz/p/11867468.html
Copyright © 2011-2022 走看看