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

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

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

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct node
    {
        int data;
        struct node* next;//指向node的指针,指向下一个节点(保存下一个节点的地址)
    } Node;
    //初始化 我的实现逻辑就是生成一个结点用来保存链表的头结点
    //然后将这个节点的地址返回 这样我们就生成了一个头结点
    Node* init()
    {
        //分配一个头结点的内存 ,将内存给first
        Node* first = (Node*)malloc(sizeof(Node));
        //初始化这个结点的数据 -1表示头结点
        first->data = -1;
        first->next = NULL;
        return first;//将这个结点的内存地址返回
    }
    //传入链表的头指针 和要插入的数据
    void Add(Node* List,int data)
    {
    
        //将头结点的位置告诉 temp_List
        Node* temp_List = List;
        //循环到最后一个地方
        while(temp_List->next)
            temp_List = temp_List->next;
    
        //分配一个结点的内存 ,保存新数据
        Node* new_Node = (Node*)malloc(sizeof(Node)); //思考 为什么不能用 Node new_Node;
        new_Node->data = data;
        new_Node->next = NULL;
    
        temp_List->next = new_Node;// 将新节点的地址给上一个结点
    
    }
    //参数 要删除的链表 和要删除的数据
    void Delete(Node* List,int del_data)
    {
        //将头结点的位置告诉 temp_List
        Node* temp_List = List;
    
        //如果当前结点的下一个结点的数据不等于要删除的数据并且没有最后一个
        //就一直找下去
        while(temp_List->next->data != del_data&&temp_List->next)
            temp_List = temp_List->next;
        //现在的 temp_List 就是要删除的结点的上一个结点
        temp_List->next =  temp_List->next->next;
    }
    //这里就写一个根据下标查找吧 根据下标删除 和根据值查找自己写
    int Select(Node* List,int index)
    {
        //将头结点的位置告诉 temp_List
        Node* temp_List = List;
        while(index--&&temp_List->next)
            temp_List = temp_List->next;
        return  temp_List->data;
    }
    void Alter()
    {
        //修改就很简单了,自己去做一下 ,还有一个关键的插入点
    }
    void Insert(Node* List,int index,int data)
    {
        //将头结点的位置告诉 temp_List
        Node* temp_List = List;
        while(index--&&temp_List->next)
            temp_List = temp_List->next;
        //分配一个结点的内存 ,保存新数据
        Node* new_Node = (Node*)malloc(sizeof(Node)); //思考 为什么不能用 Node new_Node;
        new_Node->data = data;
        new_Node->next = temp_List->next;// 第一步
        temp_List->next = new_Node;//第二步
        //注意 第一步第二步顺序千万不能颠倒 这个考试必考!!
    
    }
    void Show(Node* List)
    {
        //将头结点的位置告诉 temp_List
        Node* temp_List = List;
        printf("List = [");
        while(temp_List->next)
        {
            temp_List = temp_List->next;
            printf("%d, ",temp_List->data);
        }
        printf("]\n");
    }
    int main()
    {
        Node* List_First;//指向头结点的指针
        List_First = init();//初始化头结点
        printf("%d",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);
        Delete(List_First,4);
        Show(List_First);
        printf("index:3 =%d \n",Select(List_First,3));
        printf("index:5 =%d \n",Select(List_First,5));
        printf("index:30 =%d \n",Select(List_First,30));//超过返回最后一个
        Insert(List_First,1,100);//在下标1后面插入100
        Insert(List_First,4,50);//在下标4后面插入100
        //思考 如果输入的下标超过了最多的元素 怎么插入到最后一个
        Show(List_First);
        return 0;
    }
  • 相关阅读:
    状态图(Statechart Diagram)—UML图(五) .
    时序图(Sequence Diagram)—UML图(六)
    传说中的WCF(8):玩转消息协定
    SCSF 系列:利用 Smart Client Software Factory 实现 StopLight (Step By Step)
    ASP.NET MVC 3.0(四): 我要MVC潜规则之配置Routing
    传说中的WCF(14):WCF也可以做聊天程序
    部署图(Deployment Diagram)—UML图(九)
    活动图(Activity Diagram)—UML图(四)
    今天做的机试题Socket聊天程序
    UML的基本结构 .
  • 原文地址:https://www.cnblogs.com/xwxz/p/11867453.html
Copyright © 2011-2022 走看看