• 08 尾插入法创建单链表(实现1)


    1,创建单链表,用尾插入法给单链表赋初始值,并打印出链表的全部数据

     1 /*尾插入法
     2 创建单链表
     3 */
     4 
     5 
     6 #include<stdio.h>
     7 #include<stdlib.h>
     8 
     9 //链表内存结构
    10 typedef struct LinkList {
    11     int data; //数据域
    12     struct LinkList* next; //指针域
    13 }link;
    14 
    15 //单链表的创建(创建有头结点的)
    16 link* createLink() {
    17     link* head = (link*)malloc(sizeof(link)); //申请头结点
    18     head->data = -1; //头结点的数据域是 -1
    19     head->next = NULL; //头结点的指针域是 NULL
    20     if (head) {
    21         /*
    22         printf("单链表创建成功
    ");
    23         printf("头结点的数据域是:%d
    ", head->data);
    24         printf("头结点的指针域是:%p
    ", head->next);
    25         */
    26         return head;
    27     }
    28     else {
    29         printf("单链表创建失败
    ");
    30         return;
    31     }
    32     
    33 }
    34 
    35 
    36 //单链表的初始化(尾插入法)
    37 int* initLink(link* head_node,int data[10]) { //用data[]保存初始化的链表的数据,后传给showLink()遍历打印
    38     link* p = head_node; //将头结点赋给p,p初始时是头结点,后用来不断申请结点
    39     link* r = head_node; //同时将头结点赋给 r, r 始终是链表的最后一个结点
    40     for (int i = 0; i < 10; i++) {
    41         p = (link*)malloc(sizeof(link)); //p不断往后申请内存空间
    42         p->data = i; //给新申请的结点的数据域赋值
    43         p->next = NULL; //新申请的结点指针域初始化为空
    44         r = p; //p成功申请结点空间后,将p这个新申请的结点赋给r,让r始终是链表的最后一个结点
    45         printf("%d  ", r->data); //打印出初始化链表中的每个结点的数据域的值
    46         data[i] = r->data; //将数据域的值都保存在data[]数组中
    47     }
    48     printf("
    ");
    49     //printf("最终r的指针域是:%p
    ", r->next); //最终r就是最后一个结点,指针域是空00000000
    50     return data;
    51 }
    52 
    53 //打印链表数据
    54 void showLink(int data[10]) {
    55     for (int i = 0; i < 10; i++) {
    56         printf("%d  ", data[i]);
    57     }
    58 }
    59 
    60 void main() {
    61     createLink();
    62 
    63     int data[10];
    64     printf("初始化链表是:
    ");
    65     initLink(createLink(),data);
    66 
    67     printf("打印链表数据:
    ");
    68     showLink(data);
    69 
    70 }
    71     

     2,将初始化赋值改为用户输入

     1 /*尾插入法
     2 创建单链表
     3 */
     4 
     5 
     6 #include<stdio.h>
     7 #include<stdlib.h>
     8 
     9 //链表内存结构
    10 typedef struct LinkList {
    11     int data; //数据域
    12     struct LinkList* next; //指针域
    13 }link;
    14 
    15 //单链表的创建(创建有头结点的)
    16 link* createLink() {
    17     link* head = (link*)malloc(sizeof(link)); //申请头结点
    18     head->data = -1; //头结点的数据域是 -1
    19     head->next = NULL; //头结点的指针域是 NULL
    20     if (head) {
    21         /*
    22         printf("单链表创建成功
    ");
    23         printf("头结点的数据域是:%d
    ", head->data);
    24         printf("头结点的指针域是:%p
    ", head->next);
    25         */
    26         return head;
    27     }
    28     else {
    29         printf("单链表创建失败
    ");
    30         return;
    31     }
    32     
    33 }
    34 
    35 
    36 //单链表的初始化(尾插入法)
    37 int* initLink(link* head_node,int data[10]) { //用data[]保存初始化的链表的数据,后传给showLink()遍历打印
    38     link* p = head_node; //将头结点赋给p,p初始时是头结点,后用来不断申请结点
    39     link* r = head_node; //同时将头结点赋给 r, r 始终是链表的最后一个结点
    40     for (int i = 0; i < 10; i++) {
    41         p = (link*)malloc(sizeof(link)); //p不断往后申请内存空间
    42 
    43         int num = 0;
    44         printf("请输入要添加的值:
    ");
    45         scanf("%d", &num);
    46 
    47         p->data = num; //给新申请的结点的数据域赋值
    48         p->next = NULL; //新申请的结点指针域初始化为空
    49         r = p; //p成功申请结点空间后,将p这个新申请的结点赋给r,让r始终是链表的最后一个结点
    50         //printf("%d  ", r->data); //打印出初始化链表中的每个结点的数据域的值
    51         data[i] = r->data; //将数据域的值都保存在data[]数组中
    52     }
    53     printf("
    ");
    54     //printf("最终r的指针域是:%p
    ", r->next); //最终r就是最后一个结点,指针域是空00000000
    55     return data;
    56 }
    57 
    58 //打印链表数据
    59 void showLink(int data[10]) {
    60     for (int i = 0; i < 10; i++) {
    61         printf("%d  ", data[i]);
    62     }
    63 }
    64 
    65 void main() {
    66     createLink();
    67 
    68     int data[10];
    69     printf("初始化链表:
    ");
    70     initLink(createLink(),data);
    71 
    72     printf("打印链表数据:
    ");
    73     showLink(data);
    74 
    75 }
    76     

  • 相关阅读:
    一个好玩的代码生成工具
    正式决定了...
    小评几种O/R Mapping工具
    本期期刊主题:ASP.NET技术与JavaScript技巧,包括控件等
    vs.net2005单元测试的私有方法测试
    如何为一个instance配置多个监听,并且实现Client Load Balancing和Client Load Balancing
    编译告警解决记录
    SourceInsight宏开发
    map
    挖掘G13金矿让150M手机内存变成250M
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/12455762.html
Copyright © 2020-2023  润新知