数据结构与算法之单链表的整表创建

一、单链表的整表创建

      1.顺序结构的线性表的整表创建

      顺序结构的线性表的整表创建,我们可以用数组的初始化来直观理解,因为线性表的顺序存储结构实际就是在数组的基础上,增加了一个变量来存储当前线性表的长度构成的一个结构。

      2.单链表的整表创建

  • 单链表和顺序存储结构的线性表不一样,因为它不像顺序存储结构数据那么集中,它的数据可以是分散在内存的各个角落,它的增长也是动态的。
  • 单链表所占用空间的大小和位置是不需要预先分配预定的,可以根据系统的情况和实际的需求即时生成。
  • 创建单链表的过程是一个动态生成链表的过程,从“空表”的初始状态起,依次建立各元素结点并逐个插入链表。

      3.单链表整表创建的算法思路:

  • 声明一个结点p和计数器变量i;
  • 初始化一空链表L;
  • 让L的头结点的指针指向NULL,即建立一个带头结点的单链表;
  • 循环实现后继结点的赋值和插入。

      4.头插法建立单链表

  • 头插法从一个空表开始,生成新结点,读取数据存放到新节点的数据域中,然后将新结点插入到当前链表的表头上,直到结束为止。
  • 简单说,就是将新加进的元素放在表头后的第一个位置,即让新插入的元素的next指向之前头结点指向的元素,然后让表头的next指向新插入的结点。

      代码实现:

// 头插法建立单链表 CreateListHead.c

void CreateListHead(LinkList *L, int n){
    LinkList p;
    int i;

    srand(time(0)); // 初始化随机数种子,为后面给单链表赋值随机数做准备

    *L = (LinkList)maclloc(sizeof(Node)); // 生成一个结点
    (*L)->next = NULL; // 

    for(i=0; i<n; i++){
        p = (LinkList)maccloc(sizeof(Node));
        p->data = rand()%100 + 1; // rand()%100得到0~99的随机数,加上1,就得到了1~100的随机数了
        p->next = (*L)->next; // 将新插入的p的next指向表头的next
        (*L)->next = p; // 然后将表头的next指向新插入的p
    }
}

      5.尾插法建立单链表

      头插法建立单链表算法虽然简单,但是生成的链表中结点的次序和输入的顺序相反。

      代码实现:

// 尾插法建立单链表 CreateListTail.c

void CreateListTail(LinkList *L, int n){
    LinkList p, r;
    int i;

    srand(time(0)); // 初始化随机数种子,为后面给单链表赋值随机数做准备

    *L = (LinkList)maclloc(sizeof(Node)); // 生成一个结点
    r = *L // 让r指向链表的尾部

    for(i=0; i<n; i++){
        p = (LinkList)maccloc(sizeof(Node));
        p->data = rand()%100 + 1; // rand()%100得到0~99的随机数,加上1,就得到了1~100的随机数了
        r->next = p; // 将链表的尾部r的next指向新插入的p
        r = p; // 然后链表的尾部r移动到新插入的结点p处,保证每执行依次循环r始终都在链表的尾部
    }
}

 

本文为原创文章,如果对你有一点点的帮助,别忘了点赞哦!比心!如需转载,请注明出处,谢谢!

 

转载于:https://my.oschina.net/aibinxiao/blog/1833593

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值