zoukankan      html  css  js  c++  java
  • [日常] 算法-单链表的创建-尾插法

    1.创建头结点,头结点的next指向null

    2.把头结点赋值给一个中间变量

    3.循环中创建结点, 中间变量的next指向新结点

    4.新结点覆盖中间变量

    c语言版:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Node{
            char* data;
            struct Node* next;
    } Node;
    typedef Node* LinkList;
    int main(){
            //指针所占字节与系统有关,一般32位系统,一个指针占4个字节
            printf("%d
    ",sizeof(Node));//输出 4+4=8
            //头结点
            LinkList head=(LinkList)malloc(sizeof(Node));
            //第一个结点
            Node* node1=(Node*)malloc(sizeof(Node));
            node1->data="aaa";
            node1->next=NULL;
    
            //第二个结点
            Node* node2=(Node*)malloc(sizeof(Node));
            node2->data="bbb";
            node2->next=NULL;
    
            head->next=node1;
            node1->next=node2;
    
            //遍历
            while(head->next){
                    head=head->next;
                    printf("%s
    ",head->data);
            }   
    
            //2.尾插法
            LinkList list=(LinkList)malloc(sizeof(Node));
            list->next=NULL;
            LinkList temp=list;//中间过渡
            for(int i=0;i<10;i++){
                    LinkList node=(LinkList)malloc(sizeof(Node));
    
                    char* str=(char*)malloc(4);//给字符串分配内存
                    sprintf(str,"aaa%d",i);
                    node->data=str;
                    temp->next=node;
                    temp=node;//循环的时候,每次覆盖成最新的结点
            }   
    
            //遍历
            while(list->next){
                    list=list->next;
                    printf("%s
    ",list->data);
            }   
    }
    

    go语言版:

    package main
    
    import(
            "fmt"
    )
    
    type Node struct{
            data string
            next *Node
    }
    type LinkList *Node
    func main(){
            list:=new(Node)
            list.next=nil
            var node LinkList
            temp:=list
            for i:=0;i<10;i++{
                    node=new(Node)
                    node.data="aaa"+fmt.Sprintf("%d",i)
                    node.next=nil
                    temp.next=node
                    temp=node
            }   
    
            //遍历
            for{
                    list=list.next
                    fmt.Println(list.data)
                    if list.next==nil{
                            break
                    }   
            }   
    }
    

    php语言版:

    <?php
    class Node{
            public $data;
            public $next;
    }
    //尾插法
    $list=new Node();
    $list->next=null;
    $temp=$list;
    for($i=0;$i<10;$i++){
            $node=new Node();
            $node->data="aaa{$i}";
            $node->next=null;
            $temp->next=$node;
            $temp=$node;
    }
    
    //遍历
    while($list->next){
            $list=$list->next;
            echo $list->data."
    ";
    }
    

      

      

      

  • 相关阅读:
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS博客作业01--线性表
    C语言博客作业05--指针
    C语言博客作业04--数组
    C语言博客作业03--函数
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业02--栈和队列
    C博客作业05-指针
  • 原文地址:https://www.cnblogs.com/taoshihan/p/9166298.html
Copyright © 2011-2022 走看看