zoukankan      html  css  js  c++  java
  • 数据结构学习笔记(2)——链表创建和链表遍历

    说明(2018-3-15 20:34:49):

    1. 开始将pNew挂到pHead后面,会有问题,每个新生成的节点都挂到了pHead后面。

    2. 然后改为,新建一个pTail尾节点,让它等于pHead,然后每次生成一个新节点,就让这个pTail等于这个新节点,以便下一个新节点能够挂到这个pTail尾节点上,也就是上一个旧节点。

     1 #include<stdio.h>
     2 #include<malloc.h>
     3 #include<stdlib.h>
     4 #pragma warning(disable:4996)
     5 
     6 
     7 typedef struct Node
     8 {
     9     int data;//数据域
    10     struct Node * pNext;//指针域
    11 }NODE, *pNODE;
    12 pNODE CreateList();
    13 void TraverseList(pNODE pHead);
    14 void main()
    15 {
    16     pNODE pHead = CreateList();//生成一个链表,把链表中第一个节点的地址赋给pHead
    17     TraverseList(pHead);//遍历链表,输出每个节点数据
    18     system("pause");
    19 }
    20 
    21 pNODE CreateList()
    22 {
    23     int len;
    24     printf("请输入链表的长度:
    ");
    25     scanf("%d", &len);
    26     int val;//临时存放每个节点的数据
    27     pNODE pHead = (pNODE)malloc(sizeof(NODE));
    28     pNODE pTail = pHead;//pTail,pHead两个都指向了头结点
    29     pTail->pNext = NULL;//这一句要加上,把头结点的指针域清空,以便节点为0时,遍历的参数pHead->pNext为NULL。这样的话就保证了pTail永远指向了尾节点
    30     if (pHead == NULL)
    31     {
    32         printf("内存分配失败!");
    33         exit(-1);
    34     }
    35     for (int i = 0; i < len; i++)
    36     {
    37         pNODE pNew = (pNODE)malloc(sizeof(NODE));//为新的节点分配内存,是一个临时节点,避免每一个节点重新起名
    38         //pNODE pTail = (pNODE)malloc(sizeof(NODE));//设置一个尾指针,存放最后一个节点的地址
    39         if (pNew == NULL)
    40         {
    41             printf("内存分配失败!");
    42             exit(-1);
    43         }
    44         printf("请输入第%d个节点的数据:
    ", i + 1);
    45         scanf("%d", &val);
    46         pNew->data = val;//新节点的数据域赋值
    47         //下面三句最重要!!!
    48         pTail->pNext = pNew;//尾节点指针域指向了新节点的指针pNew
    49         pNew->pNext = NULL;//新节点的指针域清空,因为最后一个节点的指针域应该是空的
    50         pTail = pNew;//尾节点的指针等于这个新节点的指针,方便下一个新节点挂在旧节点之后
    51     }
    52     return pHead;
    53 }
    54 
    55 void TraverseList(pNODE pHead)
    56 {
    57     pNODE p = pHead->pNext;
    58     while (p != NULL)
    59     {
    60         printf("%d ", p->data);
    61         p = p->pNext;
    62     }
    63     return;
    64 }
  • 相关阅读:
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark RDD(Resilient Distributed Datasets)论文
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    【机器学习实战】第10章 K-Means(K-均值)聚类算法
    [译]flexbox全揭秘
  • 原文地址:https://www.cnblogs.com/Jacklovely/p/8576151.html
Copyright © 2011-2022 走看看