链表的创建,malloc动态申请空间

今天我们来使用malloc申请动态空间来创建一个单向链表;

一: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,准备工作做完,我们开始建链表;

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

#include<stdio.h>

#include<stdlib.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;i<N;i++)

    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;i<N;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);

}

原谅字丑

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容

  • 本文内容:1、 什么是链表?2、 链表共分几类?3、 链表的 C 实现! 总表:《数据结构?》 工程代码 Gith...
    半纸渊阅读 39,930评论 0 54
  • 作为一个资深的新手程序员😂,链表这些既基础又深奥的东西是日常工作中并不常见,但是却非常重要,所以就总结一下链表的简...
    Clark_new阅读 4,247评论 4 12
  • include<iostream> using namespace std; //单链表 typedef stru...
    jmychou阅读 424评论 0 0
  • 相信每个人都有自己心怡的人,但如何掳获对方的心呢? 花心不可取,当你在追一个人的时候,请专一,至少在一个圈子里,你...
    enjoy哇唔哇唔哇阅读 241评论 0 0
  • 如题,如果有条件选择,你会让婆婆带孩子吗? 01 首先,我们要明确一点:在你看来,婆婆带孩子是天经地义的吗? 大多...
    一笑育儿阅读 953评论 1 0