一:malloc申请动态空间注意以下事项:

1,malloc申请动态空间时必须声明类型;

2,使用malloc申请的空间在使用完成之后必须使用free释放;

3,malloc申请空间的类型必须和指向他的指针类型匹配;such as:

   int *p;p=(int *)malloc(sizeof(所要存储数据的类型));free(p);

//在这里要注意的是在第三点中所说的类型匹配指的是指针p的int类型和malloc前面的int 类型匹配,与sizeof括号里的无关;
二:链表的创建

我们来创建一个链表用来存储5个从键盘输入的整数;

先来了解什么是节点:在链表中我们把申请的一个动态空间称之为节点,每一个节点分为两个域,数据域和指针域,数据域用来存贮你要存的数据,指针域用来存储下一个节点的地址;

1,我们首先使用结构体将节点的两个域分别定义出来;

typedef struct node{

int date;                            //用来存储整数的数据域struct node *next;              //这里定义了一个指向结构体的结构体指针,即节点的指针域;

}Elemsn; //为了方便书写的方便我们为结构体起一个别名,Elemsn,等价于struct node;

2,申请动态空间作为节点,可以理解为链表的"一个"环;并用一个指针指向他,当然类型匹配指针的类型也要为结构体类型指针;

Elemsn *p;p=(Elemsn *)malloc(sizeof(Elemsn));//申请的空间大小为sizeof(Elemsn);

3,准备工作做完,我们开始建链表;

我们使用函数的调用完成链表的建立

#includestdio.h#includestdlib.h#define N 5#define null 0                                    //方便书写,我们声明null=0;Elemsn *Creatlink(int a[]);            //声明函数,该函数为创建链表的函数void Printlink(Elemsn *h);            //声明函数,该函数为输出链表的函数
int main(void)    //   主函数{int a[N];                //   定义整形数组a用来存放从键盘输入的5个值int i;for(i=0;scanf("%d",a+i);                //从键盘输入5个值Elemsn *head=null;                /*在主函数中定义指向链表头部的指针,我们称为头指针,领他的指针域为空*/head=Creatlink(a);         /*调用函数,函数将返回已创建好的链表,我们只需用在主函数中定义好的头指针将他指住,这样我们的链表也就建好了;这里我们将要存入链表中的数组传到形参中去,所以我们将数组第一个单元的首地址传过去*/Printlink(head);            //将整个链表传过去,调用输出函数将链表存的值输出free(head);            //free释放return 0;}

Elemsn *Creatlink(int a[]) //用指针a来接数组的地址,开始创建链表

{

Elemsn *head,*tail,*p;            /*定义指向链表头部的头指针和指向尾部的tail指针,以及创建节点的指针p*/int i;head=tail=(Elemsn *)malloc(sizeof(Elemsn));//刚开始的时候头和尾在同一个节点上head->date=a[0];                        //令头节点的数据域存a[0];head->next=null;                        //因为此时还没有创建下一个节点,所以头指针指针域为空,没有指向;for(i=1;in;i++)        {p=(Elemsn *)malloc(sizeof(Elemsn));p->date=a[i];p->next=null;        //这里同上为创建节点并给   ‘域’  赋值tail->next=p;       // 这里很重要,此处令尾部指针  tail  所指向节点的指针域保存所创节点的地址,即为挂链tail=p;    //然后将尾部指针后移,移到p的位置,此时tail与p都指向所创的节点,然后反复循环创建节点,挂链,后移直到循环结束,此时最后一个节点的指针域为空,即为null}return head;        //返回头指针所保存的地址,指针释放,主函数中用已经定义好的head指针去接收返回的地址就好了;

}

void Printlink(Elemsn *h) //用指针h来接受链表,指向链表头部

{

Elemsn *p;for(p=h;p!=null;p=p->next)printf("%d\t",p->date);

}

数据结构-malloc申请动态空间-链表的创建相关推荐

  1. C++类对象成员、动态对象、new、delete运算符申请动态空间(C++初学面向对象)

    文章目录 一.类成员对象 1.类的对象 2.具体参考代码 二.动态对象与new.delete 1.C语言中为类的对象开辟动态空间 2.C++的new开辟动态空间:类型名 *p= new 类型名 3.请 ...

  2. malloc申请内存空间失败

    上午在调试自己写的一段代码的过程中,发现malloc函数分配内存失败,仔细梳理了一下自己写的代码,失败的malloc操作之前也malloc了两三次,但都是成功的,网上搜了一下,都提到失败的原因可能是因 ...

  3. C++/C语言申请动态空间的详解【new关键字、malloc关键字、delete和free关键字】

    文章目录 [1] C++ ->new关键字 [2] C语言->malloc关键字 [3]C++/C->delete和free关键字 [1] C++ ->new关键字 new: ...

  4. [数据结构]freebasic实现动态单链表

    前言 首先,感谢勇芳为我们提供了强大的编辑器vfb.这是我在csdn上第一次发关于freebasic的博客.因为我是一名初三学生,没有时间系统学习fb,以下代码有不规范的还请各位大佬指出[真诚] (转 ...

  5. python 申请内存空间、用于创建多维数组_python 申请内存空间,用于创建多维数组的实例...

    以三维数组为例 先申请1个一维数组空间: mat = [None]*d1 d1是第一维的长度. 再把mat中每个元素扩展为第二维的长度: for i in range(len(mat)): mat[i ...

  6. C++动态空间申请、动态对象(new与delete运算)

    文章目录 一.动态空间申请 二.动态对象的使用 一.动态空间申请 #include <iostream> #include <string.h> #include <st ...

  7. C语言动态申请内存空间

    为什么要动态内存申请 1.定义数组的时候数组的长度是预先定义好的,在整个程序中固定不变; 2.但是在实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定 3.为了解决 ...

  8. malloc申请堆内存

    1.malloc申请的空间,是否记录空间大小?若是记录,那所记录的空间大小在哪呢?为什么利用free释放不需要空间大小参数呢? malloc申请空间时,记录其空间大小(其空间上方,有一个数据头,头部信 ...

  9. 数据结构-带头节点的单链表(C语言)超详细讲解

    前面我们学到线性表的顺序存储结构(顺序表),发现它有着明显的缺点:插入和删除元素时需要频繁的移动元素,运算效率低.必须按事先估计的最大元素个数申请连续的存储空间.存储空间估计大了,造成浪费空间:估计小 ...

最新文章

  1. 10-TypeScript中的接口
  2. python打包为exe文件_Pyinstaller(python打包为exe文件)
  3. 麦肯锡顾问的整体设计:从大局需要安排工作
  4. python统计特定类型文件数量_分享一些常见的Python编程面试题及答案
  5. 模拟器中文输入法设置
  6. 动感英语笔记_【共同战“疫”】(一)滨海新区大港西苑小学英语教师团队
  7. 51单片机中使用ucos ii的优缺点(好文)
  8. Data - 大数据生态圈
  9. jdom解析xml文件_JDOM编辑XML文件示例
  10. java认证考试题库看不懂_一道JAVA认证考试试题,有点想不通,各位看看...
  11. python 字符串不相等_python实现找出来一个字符串中最长不重复子串
  12. C++_你真的知道++i 和 i++的区别吗?_左值/右值/右值引用
  13. 逆clarke变换_克拉克(CLARKE)和帕克(PARK)变换
  14. 荣耀3x android 5.0,华为荣耀3X畅玩版_EMUI2.3_Android4.4_完整
  15. Python中sys模块使用
  16. Lua 实现复数计算器
  17. 小米笔记本Pro ubuntu 18.04安装显卡驱动
  18. Uber是什么 读书笔记
  19. 2018一瞬即逝,奋斗的日子也需要停下来,总结反思,2019也许不会更好,但不会差。
  20. wingdings字体符号在哪_Wingdings特殊字符及符号对照表

热门文章

  1. 网站使用微信登录接口,所踩的坑...
  2. 开源电子原型平台 Arduino
  3. [Swift]LeetCode1031. 两个非重叠子数组的最大和 | Maximum Sum of Two Non-Overlapping Subarrays...
  4. uefi模式安装windows10和deepin
  5. 液晶显示屏的C语言编码,AT89C51单片机驱动液晶显示汉字C语言
  6. Javascript:ES6-ES11(1)
  7. 什么是GPU云服务器,有哪些优势,适用于什么场景?
  8. 无监督学习-案例分析:利率期限结构
  9. Gensim:word2vec(jieba分词,去停用词)
  10. BUAA OJ 722 Gzh之表达式求值