码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构与算法-学习笔记6

时间:2014-12-17 19:05:10      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:数据结构和算法

单链表的整表创建、删除

单链表的整表创建

思路:

-声明一个结点p和计数器变量i

-初始化一个空链表L

-让L的头结点的指针指向NULL,即建立一个带头结点的单链表;

-循环实现赋值和插入

头插法建表

从一个空表开始,生成新结点,读取数据存放到新节点的数据域中,然后将新节点插入到当前链表的表头上,直到结束为止。

如,我们将hello插入链表中

bubuko.com,布布扣

代码:

void CreateListHead(LinkList *L,int e)

{

    LinkList p;

    int i;

    srand(time(0));//随机种子,与time结合模拟随机数的效果

    *L = (LinkList)malloc(sizeof(Node));//malloc生成一个结点

    (*L)->next = NULL;

    for(i = 0;i<n;i++)

    {

        p = (LinkList)malloc(sizeof(Node));

        p->data = rand()%100+1;//rand产生随机数,%100生成0~99的数

        p->next = (*L)->next;

        (*L)->next = p;

    }

}

尾插法

与头插法相反

bubuko.com,布布扣


void CreateListHead(LinkList *L,int e)

{

    LinkList p,r;

    int i;

    srand(time(0));//随机种子,与time结合模拟随机数的效果

    *L = (LinkList)malloc(sizeof(Node));//malloc生成一个结点

    r = *L;

    for(i = 0;i<n;i++)

    {

        p = (Node *)malloc(sizeof(Node));

        p->data = rand()%100+1;//rand产生随机数,%100生成0~99的数

        p->next = p;

        r = p;  //更改节点名的过程

    }

    p->next = NULL;

}

单链表的整表删除

思路:

-声明结点p和q

-将第一个结点赋值给p,下一个结点赋值给q

-循环执行释放p和q赋值给p的操作

代码:

status ClearList(LinkList *L)

{

    LinkList p,q;

    p=(*L)->next;

    while(p)

    {

        q = p->next;

        free(p);

        p =q;

    }

    (*L)->next = NULL;

    return OK;

}

单链表与顺序表存储结构优缺点


存储方式
时间性能
空间性能
顺序存储

连续存储单元依次存储

线性表的数据元素

插入:O(1)

插入和删除:平均移动

表长的一半元素,时间

为O(n)

容易溢出
单链表

用一组任意的存储单元

存放元素

插入:O(n)

插入和删除:计算位置

指针,时间仅为O(1)

不需要分配存储空间

若线性表需要频繁查找,很少插入和删除,宜采用顺序存储结构

若线性表频繁插入和删除时,宜采用单链表结构

数据结构与算法-学习笔记6

标签:数据结构和算法

原文地址:http://4790276.blog.51cto.com/4780276/1590964

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!