zoukankan      html  css  js  c++  java
  • 数据结构C语言>基本链表>

    数据结构C语言>基本链表>使用malloc()函数分配一块浮点数内存

    使用malloc()函数分配一块浮点数内存
    #include <stdio.h>
    #include 
    <stdlib.h>

    int main(int argc, char *argv[])
    {
       
    float *fp;                            /* 浮点指标宣告     */

       fp 
    = (float *) malloc(sizeof(float)); /* 配置浮点数记忆体 */
       
    if ( !fp )                            /* 检查指标         */
       {
          printf(
    "内存分配失败! \n");
          exit(
    1);
       }
       
    *fp = 3.1415926;                      /* 设定变数值       */
       printf(
    "圆周率: %10.8f \n",*fp);      /* 列出结果         */
      system(
    "PAUSE");
      
    return 0;
    }


    数据结构C语言>基本链表>使用内存动态分配重写程序

    计算英文平均成绩(动态记忆体配置)
    /* ======================================== */
    /*    程式实例: 3_1_1b.c                  */
    /*    计算英文平均成绩(动态记忆体配置)      */
    /* ======================================== */
    #include 
    <stdio.h>
    #include 
    <stdlib.h>

    int main(int argc, char *argv[])
    {
       
    int *score;                    /* 整数指标宣告 */
       
    int i;
       
    int num;                       /* 学生人数     */
       
    int sum;                       /* 成绩总分变数 */
       
    float ave;                     /* 平均成绩变数 */

       sum 
    = 0;                       /* 设定总分初值 */
       printf(
    "请输入学生人数 ==> ");
       scanf(
    "%d",&num);              /* 读取学生人数 */
       
    /* 配置成绩阵列的记忆体 */
       score 
    = (int *) malloc(num * sizeof(int));
       
    if ( !score )                  /* 检查指标     */
       {
          printf(
    "内存分配失败! \n");
          exit(
    1);
       }
       
    for ( i = 0; i < num; i++ )
       {
          printf(
    "请输入英语成绩. ==> ");
          scanf(
    "%d",&score[i]);      /* 读取英文成绩 */
          sum 
    += *(score + i);        /* 计算总分     */
       }
       ave 
    = (float) sum / (float) num;  /* 计算平均  */
       printf(
    "平均成绩: %6.2f \n",ave);
       system(
    "PAUSE");
       
    return 0;
    }


    数据结构C语言>基本链表>使用内存动态分配重写程序2

    计算英文平均成绩(动态记忆体配置)2
    /* ======================================== */
    /*    程式实例: 3_1_1c.c                  */
    /*    计算英文平均成绩(动态记忆体配置)      */
    /* ======================================== */
    #include 
    <stdio.h>
    #include 
    <stdlib.h>

    int main(int argc, char *argv[])
    {
       
    struct grade                   /* 成绩结构宣告     */
       {
          
    int math;                   /* 数学成绩         */
          
    int english;                /* 英文成绩         */
          
    int computer;               /* 电脑成绩         */
       };
       
    struct grade *student;         /* 结构阵列变数宣告 */
       
    int i;
       
    int num;                       /* 学生人数         */
       
    int m_sum,e_sum,c_sum;         /* 各科成绩总分变数 */
       
    float m_ave,e_ave,c_ave;       /* 各科平均成绩变数 */

       m_sum 
    = e_sum = c_sum = 0;     /* 总分初值         */
       printf(
    "请输入学生人数 ==> ");
       scanf(
    "%d",&num);              /* 读取学生人数     */

       student 
    = (struct grade *)     /* 配置记忆体       */
                 malloc(num 
    * sizeof(struct grade));
       
    if ( !student )                /* 检查指标         */
       {
          printf(
    "内存分配失败! \n");
          exit(
    1);
       }
       
    for ( i = 0; i < num; i++ )
       {
          printf(
    "学生编号: %d\n",i + 1);
          printf(
    "请输入数学成绩. ==> ");
          scanf(
    "%d",&student[i].math);     /* 读取数学成绩 */
          m_sum 
    += student[i].math;         /* 计算数学总分 */
          printf(
    "请输入英语成绩. ==> ");
          scanf(
    "%d",&student[i].english);  /* 读取英文成绩 */
          e_sum 
    += student[i].english;      /* 计算英文总分 */
          printf(
    "请输入计算机成绩. ==> ");
          scanf(
    "%d",&student[i].computer); /* 读取电脑成绩 */
          c_sum 
    += student[i].computer;     /* 计算电脑总分 */
       }
       m_ave 
    = (float) m_sum / (float) num; /* 计算数学平均 */
       e_ave 
    = (float) e_sum / (float) num; /* 计算英文平均 */
       c_ave 
    = (float) c_sum / (float) num; /* 计算电脑平均 */
       printf(
    "数学平均成绩: %6.2f \n",m_ave);
       printf(
    "英语平均成绩: %6.2f \n",e_ave);
       printf(
    "计算机平均成绩: %6.2f \n",c_ave);
       
       system(
    "PAUSE");
       
    return 0;
    }


    数据结构C语言>基本链表>动态内存的分配和释放

    动态内存的分配和释放
    /* ======================================== */
    /*    程式实例: 3_1_2.c                  */
    /*    浮点数内存分配和释放      */
    /* ======================================== */
    #include 
    <stdio.h>
    #include 
    <stdlib.h>

    int main(int argc, char *argv[])
    {
       
    float *fp;
       
       fp
    =(float *)malloc(sizeof(float));
       
    if(!fp)
       {
        printf(
    "内存分配失败! \n");       
        exit(
    1);
              
       }
       
    *fp=3.1415926;
       printf(
    "圆周率:%10.8f \n",*fp);
       free(fp);
       
       system(
    "PAUSE");
       
    return 0;
    }


    数据结构C语言>基本链表>链表的创建>动态数据结构的声明和内存分配

    动态数据结构的声明和内存处理
    /* ======================================== */
    /*    程式实例: 3_2_2.c                  */
    /*    动态数据结构的声明和内存处理      */
    /* ======================================== */
    #include 
    <stdio.h>
    #include 
    <stdlib.h>

    struct llist //链表结构声明 
    {
        
    int num;  //邮寄编号 
        char name[50];  //邮寄姓名 
        char address[50];  //邮寄地址 
        struct llist *next;    //指向下一标签   
    };
    typedef 
    struct llist node;  //定向新类型 
    typedef node *llink;  //定义新类型指针 

    int main(int argc, char *argv[])
    {
       llink ptr;
       ptr
    =(llink)malloc(sizeof(node));  //分配内存 
       if(!ptr)  //检查指针 
       {
               printf(
    "内存分配失败! \n");
               exit(
    1);
       } 
       printf(
    "请输入编号==>");
       scanf(
    "%d",&ptr->num);  //读取编号 
       printf("请输入姓名==>");
       scanf(
    "%s",&ptr->name);  //读取姓名 
       printf("请输入地址==>");
       scanf(
    "%s",&ptr->address);  //读取地址 
       ptr->next=NULL;  //设置指针初始值 
       
       printf(
    "邮寄数据:\n");  //输出数据项 
       printf("编号:%d\n",ptr->num);
       printf(
    "  姓名:%s\n",ptr->name);
       printf(
    "  地址:%s\n",ptr->address);
       
       
       system(
    "PAUSE");
       
    return 0;
    }


    数据结构C语言>基本链表>链表的创建>使用链表将邮寄名单用动态数据结构存储,然后输出

    链表的创建
    /* ======================================== */
    /*    程式实例: 3_2_3a.c                  */
    /*    链表的创建      */
    /* ======================================== */
    #include 
    <stdio.h>
    #include 
    <stdlib.h>

    struct llist  //链表结构声明 
    {
     
    int num;  //邮寄编号 
     char name[10];  //邮寄姓名 
     struct llist *next;    //指向下一个标签              
    };
    typedef 
    struct llist node;  //定义新类型 
    typedef node *llink;  //定义新类型指针 

    int main(int argc, char *argv[])
    {
       llink head;  
    //链表的开始指针 
       llink ptr;
       
    int i;
       
       head
    =(llink)malloc(sizeof(node));  //分配内存 
       if(!head)  //检查指针 
       {
        printf(
    "内存分配失败!\n");
        exit(
    1);         
       }
       head
    ->next=NULL;  //设置指针初始值 
       ptr=head;  //将ptr指向链表开始 
       printf("输入六项邮寄数据:\n");
       
    for(i=0;i<6;i++)  //创建其他结点循环 
       {
        printf(
    "请输入编号==> ");
        scanf(
    "%d",&ptr->num);  //读取编号
        printf("请输入编号(%d)的姓名==> ",ptr->num); 
        scanf(
    "%s",&ptr->name);
        ptr
    ->next=(llink)malloc(sizeof(node));
        
    if(!ptr->next)
        {
         printf(
    "内存分配失败!\n");
         exit(
    1);              
        }
        ptr
    ->next->next=NULL; //设置下个指针初始值 
        ptr=ptr->next;  //指向下一结点 
       }
       printf(
    "邮寄数据:\n");
       ptr
    =head;
       
    for(i=0;i<6;i++)
       {
         printf(
    "编号:%d\n",ptr->num);
         printf(
    "  姓名:%s\n",ptr->name);              
         ptr
    =ptr->next;
       }
       
       
       system(
    "PAUSE");
       
    return 0;
    }


    数据结构C语言>基本链表>链表的创建>使用链表将邮寄名单用动态数据结构存储,然后输出

    3_2_3b
    /* ======================================== */
    /*    程式实例: 3_2_3b.c                  */
    /*    链表的创建      */
    /* ======================================== */
    #include 
    <stdio.h>
    #include 
    <stdlib.h>

    struct llist
    {
     
    int num;
     
    char name[10];
     
    struct llist *next;        
    };
    typedef 
    struct llist node;
    typedef node 
    *llink;

    int main(int argc, char *argv[])
    {
       llink head; 
    //链表的开始指针 
       llink ptr,ptr1;
       
    int i;
       
       
    //创建第一结点
       head=(llink)malloc(sizeof(node));
       
    if(!head)//检查内存分配 
       {
           printf(
    "内存分配失败!\n");
        exit(
    1);            
       } 
       printf(
    "输入六项邮寄数据:\n");
       printf(
    "请输入编号==> ");
       scanf(
    "%d",&head->num);//读取编号 
       printf("请输入编号(%d)的姓名 ==> ",ptr->num);
       scanf(
    "%s",head->name);//读取姓名
       head->next=NULL;//设置指针初值
       ptr=head;//将ptr指向链表开始
       for(i=1;i<6;i++)
       {
           ptr1
    =(llink)malloc(sizeof(node));
        
    if(!ptr1)
        {
         printf(
    "内存分配失败!\n");
         exit(
    1);   
        }
        printf(
    "请输入编号==> ");
        scanf(
    "%d",&head->num);//读取编号 
        printf("请输入编号(%d)的姓名 ==> ",ptr->num);
        scanf(
    "%s",ptr1->name);//读取姓名
        ptr1->next=NULL;//设置指针初值 
        ptr->next=ptr1;//连接结点 
        ptr=ptr->next;//指向下一结点       
       } 
       
       printf(
    "邮寄资料:\n");
       ptr
    =head;
       
    for(i=0;i<6;i++)
       {
        printf(
    "编号:%d\n",ptr->num);
        printf(
    "    姓名:%s\n",ptr->name);
        ptr
    =ptr->next;     
       }
       
       system(
    "PAUSE");
       
    return 0;
    }

    我终于知道一生二,二生三,三生万物的道理了。三个指针,head指针用来第一空间,ptr11指针用来开辟新空间,part指针用来生成第一空间与第二空间的连接。连接好后,part1当然用于开辟第三空间,part指针又去生成第二空间与第三空间的连接。依次类推。

    具体过程如图:

     

     

    看这段代码时,不用脑子生成图像会糊涂。就算你脑子生成了图像,脑子里图像的持久性是个问题,以及过多图像都要明确分辨也是个问题。这是在挑战大脑的记忆。所以把它画出来,保存在除大脑外的其它地方是不错的选择。

    还有个问题,你把它画出来了。但图像是静止。这段代码表达了一个过程。用什么来描述过程比较好呢?动画。

    由此可知,文字可以描述过程,但对于大脑不自然。动画可能更自然些。

    需要发明一个用动画来编写程序,更能解放大脑的创造力,也就是绽放你的思想。CC语言一贯强调。


    合乎自然而生生不息。。。
  • 相关阅读:
    UPS FAQ-不错的UPS资料
    HPL.dat FAQ
    Fortran77计算某段代码的CPU运行时间
    存储知识 什么是LUN?LUN有什么用?对理解存储设备很有好处
    HPL.dat Tune
    UPS-瓦特(W)和伏安(VA):易混淆的两个概念
    mysql sql 索引相关用法,加快查询速度
    mysql 数据库分类设计方法与PHP结合
    c# SQLServer 数据库连接类
    .net上传图片生成大小缩略图
  • 原文地址:https://www.cnblogs.com/samwu/p/1857029.html
Copyright © 2011-2022 走看看