精华内容
下载资源
问答
  • 数据结构-头插法和尾插

    万次阅读 多人点赞 2019-05-01 20:41:50
    头插法 void HeadCreatList(List *L... //不用像尾插法一样生成一个终端节点。 L->next = NULL; for (int i = 0; i < 10; i++) { s = (struct List*) malloc(sizeof(struct List));//s指向新申请的节点 ...

     数据结构——八大算法总结(最详细)

    头插法

    void HeadCreatList(List *L) //头插法建立链表
    {
    List *s; //不用像尾插法一样生成一个终端节点。
    L->next = NULL;
    for (int i = 0; i < 10; i++) {
            s = (struct List*) malloc(sizeof(struct List));//s指向新申请的节点
            s->data = i;//用新节点的数据域来接受i
            s->next = L->next; //将L指向的地址赋值给S;//头插法与尾插法的不同之处主要在此,
            //s所指的新节点的指针域next指向L中的开始节点
            L->next = s; //头指针的指针域next指向s节点,使得s成为开始节点。
        }
    }


    尾插法

    void TailCreatList(List *L) //尾插法建立链表
    {
    List *s, *r;//s用来指向新生成的节点。r始终指向L的终端节点。
    r = L; //r指向了头节点,此时的头节点是终端节点。
    for (int i = 0; i < 10; i++) {
            s = (struct List*) malloc(sizeof(struct List));//s指向新申请的节点
            s->data = i; //用新节点的数据域来接受i
            r->next = s; //用r来接纳新节点
            r = s; //r指向终端节点
        }
        r->next = NULL; //元素已经全部装入链表L中
        //L的终端节点指针域为NULL,L建立完成
    }

    展开全文
  • 用头插法建立的邻接表并输出 代码 #include <iostream> #include<malloc.h> using namespace std; typedef struct EdgeNode//边表节点 { int adjvex;//表示该边的另一个节点对应的下标 int weight...

    用头插法和尾插法建立图的邻接表并输出

    1、头插法代码

    #include <iostream>
    #include<malloc.h>
    using namespace std;
    
    
    typedef struct EdgeNode//边表节点
    {
        int adjvex;//表示该边的另一个节点对应的下标
        int weight;//保存该边的权值,无权图可以设为1
        struct EdgeNode *next;//指针域,指向下一个节点
    }EdgeNode;
    
    typedef struct VertexNode//顶点表节点
    {
        char data;//顶点域,存储顶点信息
        EdgeNode *firstedge;
    }VertexNode,AdjList[100];
    
    typedef struct GraphAdjList
    {
        AdjList adjlist;//邻接表
        int Vnum,Enum;//顶点的数量和边的数量
    }GraphAdjList;
    
    
    void CreateAdjList(GraphAdjList *G)//创建邻接表
    {
        int dis,FPS,SPS;//边的权值以及边的前后节点的下标
        char FP,SP;//边的前后节点
        EdgeNode *e;
    
        cout<<"请输入顶点数和边数:"<<endl;
        cin>>G->Vnum;
        cin>>G->Enum;
        cin.get();
        cout<<"请输入顶点字符:"<<endl;
    
        for(int i=0;i<G->Vnum;i++)
        {
            cin>>G->adjlist[i].data;
            G->adjlist[i].firstedge = NULL;
        }
        cin.get();
        cout<<"请输入各条边的前后顶点及边的权值:"<<endl;
        for(int i=0;i<G->Enum;i++)
        {
            cin>>FP>>SP;
            cin>>dis;
            for(int j=0;j<G->Vnum;j++)//找边的第一个节点的位置下标
            {
                if(FP==G->adjlist[j].data)
                {
                    FPS = j;
                }
            }
            for(int k=0;k<G->Vnum;k++)//找边的第二个节点的位置下标
            {
                if(SP==G->adjlist[k].data)
                {
                    SPS = k;
                }
            }
    
            e = (EdgeNode*)malloc(sizeof(EdgeNode));//向内存申请空间
            e->adjvex = SPS;//存储边的第二个节点的下标
            e->weight = dis;
            e->next = G->adjlist[FPS].firstedge;//利用头插法建立链表
            G->adjlist[FPS].firstedge = e;
        }
    }
    void DisplayAdjList(GraphAdjList G)//输出显示邻接表
    {
        EdgeNode *e;
        cout<<"共有"<<G.Vnum<<"个顶点"<<endl;
        for(int i=0;i<G.Vnum;i++)
        {
            cout<<G.adjlist[i].data<<" ";
        }
        cout<<endl;
        cout<<"共有"<<G.Enum<<"条边"<<endl;
        for(int i=0;i<G.Vnum;i++)
        {
            e = G.adjlist[i].firstedge;
            while(e!=NULL)
            {
                cout<<"["<<G.adjlist[i].data<<"->"<<G.adjlist[e->adjvex].data<<" "<<e->weight<<"]";
                e = e->next;
            }
            cout<<endl;
        }
    }
    int main()
    {
        GraphAdjList G;
        CreateAdjList(&G);
        DisplayAdjList(G);
        return 0;
    }
    

    在这里插入图片描述

    2、尾插法代码

    #include <iostream>
    #include<malloc.h>
    using namespace std;
    
    
    typedef struct EdgeNode//边表节点
    {
        int adjvex;//表示该边的另一个节点对应的下标
        int weight;//保存该边的权值,无权图可以设为1
        struct EdgeNode *next;
    }EdgeNode;
    
    typedef struct VertexNode//顶点表节点
    {
        char data;//顶点域,存储顶点信息
        EdgeNode *firstedge;
    }VertexNode,AdjList[100];
    
    typedef struct GraphAdjList
    {
        AdjList adjlist;
        int Vnum,Enum;
    }GraphAdjList;
    
    
    void CreateAdjList(GraphAdjList *G)
    {
        int dis,FPS,SPS;
        char FP,SP;
        EdgeNode *p;
    
        cout<<"请输入顶点数和边数:"<<endl;
        cin>>G->Vnum;
        cin>>G->Enum;
        cin.get();
        cout<<"请输入顶点字符:"<<endl;
    
        for(int i=0;i<G->Vnum;i++)
        {
            cin>>G->adjlist[i].data;
            G->adjlist[i].firstedge = NULL;
        }
        cin.get();
        cout<<"请输入各条边的前后顶点及边的权值:"<<endl;
        for(int i=0;i<G->Enum;i++)
        {
            cin>>FP>>SP;
            cin>>dis;
            for(int j=0;j<G->Vnum;j++)
            {
                if(FP==G->adjlist[j].data)
                {
                    FPS = j;
                }
            }
            for(int k=0;k<G->Vnum;k++)
            {
                if(SP==G->adjlist[k].data)
                {
                    SPS = k;
                }
            }
    
            EdgeNode *e = (EdgeNode*)malloc(sizeof(EdgeNode));//向内存申请空间
            e->adjvex = SPS;
            e->weight = dis;
            e->next = NULL;//该表节点暂时没有下一个节点
            p = G->adjlist[FPS].firstedge;//将第FPS个顶点的边表头指针赋值给表节点指针p
    
            if(p == NULL)//第FPS个顶点的边表结点为空
            {
                G->adjlist[FPS].firstedge = e;//实现两点相连
            }
            else
            {
                while(p->next!=NULL)
                {
                    p=p->next;
                }
                p->next=e;
            }
        }
    }
    void DisplayAdjList(GraphAdjList G)
    {
        EdgeNode *e;
        cout<<"共有"<<G.Vnum<<"个顶点"<<endl;
        for(int i=0;i<G.Vnum;i++)
        {
            cout<<G.adjlist[i].data<<" ";
        }
        cout<<endl;
        cout<<"共有"<<G.Enum<<"条边"<<endl;
        for(int i=0;i<G.Vnum;i++)
        {
            e = G.adjlist[i].firstedge;
            while(e!=NULL)
            {
                cout<<"["<<G.adjlist[i].data<<"->"<<G.adjlist[e->adjvex].data<<" "<<e->weight<<"]";
                e = e->next;
            }
            cout<<endl;
        }
    }
    int main()
    {
        GraphAdjList G;
        CreateAdjList(&G);
        DisplayAdjList(G);
        return 0;
    }
    
    

    在这里插入图片描述

    展开全文
  • 尾插法建立单链表

    2021-03-25 18:27:05
    通过画利用尾插法构建单链表的示意帮助分析,然后转化为代码的方法,很可行。当然,前提是需要知道某个阶段示意对应的是什么代码。【算法代码】 #include <bits/stdc++.h> using namespace std; struct...

     

    【算法设计思路】
    通过画利用尾插法构建单链表的示意图帮助分析,然后转化为代码的方法,很可行。当然,前提是需要知道某个阶段示意图对应的是什么代码。

    【算法代码】

    #include <bits/stdc++.h>
    using namespace std;
    
    struct Node {
    	char data;
    	Node *next;
    };
    
    void wcf(Node *L,int n) {
    	L=new Node;
    	L->next=NULL;
    	Node *r;
    	r=L;
    	for(int i=0; i<n; i++) {
    		Node *p;
    		p=new Node;
    		p->next=NULL;
    		cin>>p->data;
    		r->next=p;
    		r=p;
    	}
    
    	for(int i=0; i<n; i++) {
    		cout<<L->next->data<<" ";
    		L->next=L->next->next;
    	}
    }
    
    int main() {
    	int n;
    	cin>>n;
    	Node *p;
    	wcf(p,n);
    
    	return 0;
    }
    
    
    /*
    in:
    7
    a b c d e f g
    
    out:
    a b c d e f g
    */
    

     

    展开全文
  • 链表尾插

    2016-11-01 18:34:37
    struct node //定义结点的结构  {   int num; //数据域   struct node * next;//指针域  };    typedef struct node Node;//给结构体命名为Node  typedef struct node * link;//给...
    1. #include <stdio.h>  
    2. #include <stdlib.h>  
    3.   
    4. struct node  //定义结点的结构  
    5. {  
    6.     int num;  //数据域  
    7.     struct node * next;//指针域  
    8. };  
    9.   
    10. typedef struct node Node;//给结构体命名为Node  
    11. typedef struct node * link;//给指向结构体的指针命名为link  
    12.   
    13. void create_link(link * head)  
    14. {  
    15.     *head = NULL;  
    16. }  
    17.   
    18. void insert_code_tail(link * head,link new_code)  
    19. {  
    20.     link tmp;  
    21.     tmp = * head;  
    22.     if(* head == NULL)  
    23.     {  
    24.         new_code->next = * head;  
    25.         * head = new_code;  
    26.     }  
    27.     else  
    28.     {  
    29.         while(tmp->next != NULL)  
    30.         {  
    31.             tmp = tmp->next;  
    32.         }  
    33.         tmp->next = new_code;  
    34.         new_code->next = NULL;  
    35.     }  
    36. }  
    37.   
    38. void display_node(link head)  
    39. {  
    40.     link tmp;  
    41.     tmp = head;  
    42.     while(tmp != NULL)  
    43.     {  
    44.         printf("num = %d\n",tmp->num);  
    45.         tmp = tmp->next;  
    46.     }  
    47. }  
    48.   
    49. int main()  
    50. {  
    51.     link head = NULL; //定义头指针  
    52.     link new_code = NULL;//定义一个新的结点  
    53.     int i;  
    54.   
    55.     create_link(&head);  
    56.       
    57.     for(i = 0;i <= 9;i++)  
    58.     {  
    59.         new_code = (link)malloc(sizeof(Node));//给结构体  
    60.         if(new_code == NULL)  
    61.         {  
    62.             printf("malloc error!\n");  
    63.             exit(-1);  
    64.         }  
    65.         new_code->num = i;  
    66.   
    67.         insert_code_tail(&head,new_code);  
    68.     }  
    69.   
    70.     display_node(head);  
    71.   
    72.     return 0;  
    73. }  
    展开全文
  • 和之前发过的头插法一样,尾插法也是单链表输入数据的一种方式,我这里先给出代码,再进行图片的分析。 代码 如下: #include <stdio.h> #include <stdlib.h> struct Node{ int info; struct Node *...
  • 链表的创建有两种方法,一种是头插法(下),另一种是尾插法。 头插法是直接将头结点的下一个节点交给新节点,然后头结点指向新节点。 尾插法是直接让单链表的最后一个节点的指向新节点,然后让新节点指向NULL...
  • 正在学习数据结构中的链表,在有没有头节点的问题上的 头插法跟尾插法一直模糊。。。。。 整理了一下在有节点时的 头插法跟尾插法 头插法代码: int InsertHread(LinkList &L,int e) { LinkList tamp = L->next; //...
  • 1、创建采用邻接表存储结构、和尾插法的创建模式 2、的遍历采用DFS深度优先的算法 3、的最短路径采用Dijkstra算法 三、代码 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #...
  • 用Python实现数据结构的头插法和尾插法 1.链表结构 # -*- coding:utf-8 -*- import random as rd class Node(): def __init__(self, value, next=None): self.value = value self.next = next 2.头插法 #头插...
  • //尾插法 ArcNode *p ; p = L->adjList[a].first; if (p == NULL) { L->adjList[a].first = s; } else { while (p->next) { p = p->next; } p->next = s; } /* s->...
  • 今天学习到数据结构里的尾插法(郝斌老师的数据结构),发现很多初学者对于视频所讲的尾插法的代码有些疑惑(尽管我也是个小白),下面我们来对其分析一下 下附代码 二、代码示例 这里我把老师在课堂上讲的代码搬过来 ...
  • 创建链表有头插法和尾插法两种方法,今天要说的是尾插法,尾插法逻辑比较简单,直接上 只要将新节点新节点的数据域放上要存放的数据,然后将新节点的指针域置空让其当作尾节点,然后让指向尾节点的pTail的指针...
  • 数据结构 单链表的头插法和尾插

    千次阅读 多人点赞 2018-08-07 17:06:36
    头插法核心代码: ...尾插法核心代码: q-&gt;data = e; q-&gt;next = NULL; p-&gt;next = q; 主函数代码: #include "LinkList.h" #include &lt;stdio.h&gt; #includ...
  • 尾插法建立链表详解

    千次阅读 多人点赞 2020-07-10 10:42:58
    尾插法,顾名思义,就是把新加入的节点插入到上一个节点的尾部(头插法是把新加入的节点插入到上一个节点的头部),next存储下一个节点位置的地址,开始时,初始化定义头节点 head -> next = NULL; 表示头节点...
  • 这篇感觉叙述有点乱,最好自己调试一下,把地址,结构图,画一下。 首插法虽然简单,但节点的次序和输入的顺序相反。 若要顺序一致则可以采用尾插法。 若要理解,还是要写代码,看内存啊,文章真是没法描述。 #...
  • 对于一个链表,要对其进行插入,可以分成头插,尾插和指定位置插入,下面代码中,我只涉及到了头插和尾插。 头插 首先定义一个node,如果head的值为null,直接返回node;如果head的值不为null,将node.next...
  • 头插法和尾插法图文并茂

    万次阅读 多人点赞 2018-06-03 10:15:43
    #include "stdio.h" #include "stdlib.h" typedef struct List { int data; //数据域 ... void TailCreatList(List *L) //尾插法建立链表 { List *s, *r;//s用来指向新生成的节点。r始终指向...
  • 苹果手机尾插排线更换教程

    万次阅读 多人点赞 2019-04-17 17:45:27
    注意:测试前先把排线直接插上主板测试一下,看看能不能解决您原来的故障,再往下拆下去。 这样的好处是有些主板故障导致的问题换尾插还是解决不了,这样就不会费了那么...苹果6尾插教程https://v.youku.com/v_show...
  • 尾插法的思想主要是: 多建立一个节点类型的引用 s 指向头结点. 创建一个新的节点ai 将ai的地址给s所指节点的指针域(s.next) 使s指向新节点地址方便下次循环 import java.util.Scanner; public class weicha {...
  • 创建单链表的头插法与尾插法详解

    万次阅读 多人点赞 2018-09-26 20:54:30
    创建单链表 ...正如这幅中所表示的那样,单链表就是由可能不连续的数据所组合而成的数据结构。 其中每个数据分为两部分,一部分是数据存储的位置,称为数据域,另外指针所存储的地方,称为指针域。 typ...
  • 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) 指针(指示后继元素存储位置),元素就是存储数据的存储...
  • 双向链表 头插法 尾插

    千次阅读 2019-04-23 10:40:24
    有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右...自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特功能...
  • C语言:链表,尾插

    千次阅读 2018-06-20 16:11:50
    尾插法 #include<iostream> using namespace std; typedef struct LNode { int data; struct LNode *next; } LinkNode; //尾插法 void CreateListR(LinkNode * &L, int a[], int n) { Lin...
  • JAVA数据结构——数组,单链表(头插法,尾插法)模拟栈 前言: 首先让我们了解一下什么是栈? 1.栈的名称为(stack) 2.栈是先入后出(FILO-FirstLast Out)的有序列表 3.栈是线性表中元素的插入和删除,只能在...
  • HashMap为什么使用尾插法?

    千次阅读 2020-06-28 16:44:50
    还是尾插呢? 关于HashMap链表插入问题,java8之前之前是头插法 头插法:就是说新来的值会取代原有的值,原有的值就顺推到链表中去,就像上面的例子一样,因为写这个代码的作者认为后来的值被查找的可能性更大一点,...
  • ![图片](https://img-ask.csdn.net/upload/201703/05/1488682196_932629.jpg)![图片](https://img-ask.csdn.net/upload/201703/05/1488682440_11686.jpg)![图片]...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,447
精华内容 2,578
关键字:

尾插结构图