zoukankan      html  css  js  c++  java
  • 数据结构_链表_单向链表

    链表(Linked List)是由一连串的结构(称为结点)组成的,其中每个结点都包含指向链中下一个结点的指针。

    链表中的最后一个结点包含一个空指针。

    链表与数组不同,数组的线性序是由数组的下标决定的,而链表中的顺序是由各结点的指针域所决定的。

    链表可以灵活地表示动态集合。 采用链表表示线性表,无论向表中插入或删除元素,都不需要移动数据。

    与顺序表示法不同,链表的结点不再是连续且等距离地存放在一块存储区域,相反,结点可以存放在存储区的任何位置。

    单向链表中的结点至少有一个指针域。 其中结点的个数可以是0或多个,当结点个数为0时,称为空链表。如果链表不为空,则第一个结点指向第2个, 第2个结点指向第3个,,,,,构成线性表。链中最后一个结点的指针域为0(表示NULL指针)。

    声明结点类型。为了建立链表,首先需要一个表示链表中单个结点的结构、

    //结点结构描述
    struct node{
    	int value;
    	node *next;		//指向下一个结点的指针 
    }; 

    我们需要记录链表开始的位置,即需要有一个始终指向链表中第一个结点的变量,我们把此变量命名为first:      node * first = NULL;

    first = NULL, 表示不指向任何存储区域,即这个链表为空。

    //判断链表为空的函数
    bool is_empty(node *first)
    {
    	return !first;
    } 
    在构建链表时,需要逐个创建结点,并且把生成的每个结点加入到链表中。创建结点包括三个步骤:

    1、为结点分配内存单元;

    2、把数据存储到结点中;

    3、把结点插入到链表中。

    为了创建结点,需要一个变量临时指向该结点,假设此变量为new_node: node *new_node = new node();

    //在堆内存中分配一个能够存放该结构的内存区域,并返回获得的内存区域的首地址,赋给new_node指针。

    //例如
    new_node->value = 25;
    new_node->next = NULL; 

    在链表的开始出插入结点。如果new_node指向要插入的结点,first指向链表的首结点。为了把该结点插入链表的首部,需要两条语句。

    首先,修改该结点的成员next,使其指向先前在链表开始处的结点: new_node->next = first;

    然后,使first指向新结点:  first = new_node;

    在链表的首部插入结点的函数add_to_list,有两个形式参数: list(指向链表中首结点的指针),n(需要存储在新结点中的整数)。

    node *add_to_list(node *list, int n)
    {
    	node *temp = new node ;
    	temp->value = n;
    	temp->next = list;
    	return temp;
    }
    //例如:first = add_to_list(first,20);


  • 相关阅读:
    C# 0xC0000005 捕获
    “Task”未包含“Run”的定义
    Win10 清理自带APP
    SQLServer 2014 内存优化表
    PHP 常用函数
    Android开发之旅:环境搭建及HelloWorld
    C# PropertyGrid控件应用心得
    SQL Server 连接池 (ADO.NET) MSDN
    查看数据库连接池函数
    WCF客户端调用服务器端错误:"服务器已拒绝客户端凭据"。
  • 原文地址:https://www.cnblogs.com/Tovi/p/6194870.html
Copyright © 2011-2022 走看看