链表 最灵活的数据结构

链表是一个有序的列表,但是他在内存中时分散存储的,使用链表可以解决类似约瑟夫问题,排序,索引,广义表
<?php

/**
 * Created by PhpStorm.
 * User: qixingyi
 * Date: 2015/5/15
 * Time: 19:20
 * 链表 最灵活的数据结构
 *
 *
 * 链表是一个有序的列表,但是他在内存中时分散存储的,使用链表可以解决类似约瑟夫问题,排序,索引,广义表
 */

/**
 * Class Hero  水浒英雄排行榜管理
 */
class Hero
{
    public $no; //英雄编号
    public $name;
    public $nickname;
    public $next = null;

    public function __construct($no = ‘‘, $name = ‘‘, $nickname = ‘‘)
    {
        $this->no = $no;
        $this->name = $name;
        $this->nickname = $nickname;
    }
}

$head = new Hero();

/**
 * @param $head 好汉
 * @param $hero 英雄
 */
function addHero($head, $hero)
{
    $cur = $head;

    $i=0;
    $flag = false;

    while ($cur->next != null) {
        if ($cur->next->no > $hero->no) {
            break;
        } else if ($cur->next->no == $hero->no) {
            $flag = true;

            echo ‘<br/><br/><b style="color: red">不能抢位置‘ . $hero->no . ‘</b><br/>位置已经有人了<br/>‘;
        }
        $cur=$cur->next;
    }

    if($flag==false){
        $hero->next=$cur->next;
        $cur->next=$hero;
    }
}

/**
 * @param $head 好汉
 */
function showHeros($head){
    $cur=$head;

    while($cur->next!=null){
        echo $cur->next->no.‘ 号英雄: ‘.$cur->next->name.‘ 的外号是: ‘.$cur->next->nickname.‘<br><br>‘;

        $cur=$cur->next;
    }
}

/**
 * @param $head 好汉
 * @param $hero 英雄
 */
function updateHero($head,$hero){
    $cur=$head;
    while($cur->next!=null){
        if($cur->next->no==$hero->no){
            //已找到
            break;
        }
        $cur=$cur->next;
    }

    if($cur->next==null){//还是没找到
        echo ‘<br><br><b style="color: red">XX 【‘.$hero->hero->no.‘】 英雄不存在~</b><br><br>‘;
    }

    //ID不能改
    $cur->next->name=$hero->name;
    $cur->next->nickname=$hero->nickname;

    echo ‘<br><br><b style="color: green">VV修改 【‘.$cur->next->no.‘】 号英雄资料成功</b><br><br>‘;

}

function delHero($head,$hero_no){
    $cur=$head;
    $flag=false;
    while($cur->next!=null){
        if($cur->next->no==$hero_no){
            //已找到
            $flag=true;
            break;
        }

        $cur=$cur->next;
    }

    if($flag){
        $cur->next=$cur->next->next;
        echo ‘<br><br><b style="color: green">VV已删除 【‘.$hero_no.‘】 号英雄</b><br><br>‘;
    }else{
        echo ‘<br><br><b style="color: red">XX 【‘.$hero_no.‘】 英雄不存在~</b><br><br>‘;
    }

}
$hero=new Hero(1,‘宋江‘,‘及时雨‘);
addHero($head,$hero);
$hero=new Hero(4,‘吴用‘,‘智多星‘);
addHero($head,$hero);
$hero=new Hero(2,‘武松‘,‘打虎英雄‘);
addHero($head,$hero);
$hero=new Hero(3,‘秦明‘,‘霹雳火‘);
addHero($head,$hero);
$hero=new Hero(9,‘林冲‘,‘豹子头‘);
addHero($head,$hero);

echo ‘<br/><br/>*******************当前英雄的排行榜是*******************<br/><br/>‘;
showHeros($head);

echo ‘<br/><br/>*******************修改后的英雄的排行榜是*******************<br/><br/>‘;
$hero=new Hero(2,‘林冲的替身‘,‘狮子尾‘);
updateHero($head,$hero);
showHeros($head);

echo ‘<br/><br/>*******************删除后的英雄的排行榜是*******************<br/><br/>‘;
delHero($head,4);
showHeros($head);

  

 
时间: 2024-10-10 23:25:47

链表 最灵活的数据结构的相关文章

不要设计面面俱到、非常灵活的数据结构

不要设计面面俱到.非常灵活的数据结构. 1 #include <iostream> 2 #include <iostream> 3 #include <algorithm> 4 #include <string> 5 #include <vector> 6 /* run this program using the console pauser or add your own getch, system("pause") or

链表实现多项式相乘-数据结构学习

链表实现多项式相乘<线性表> 初学数据结构,我这个菜鸟 没看教程完全自己想. 这个题做好了好久. 不过还好总于做出来了.  先上代码,代码里有注释. 可以把注释变为cout<<注释  看一下向乘的过程. 后面再做详细的补充说明 问题描述 : 输入两个多项式,多项式的第一个数是项数.后续是两两一对,一个系数,一个指数. 多项式有序,按照系数的降序. 通过单链表实现两个多项式相乘. 输出结果多项式.同样第一项为项的个数, 后续安装指数降序排列. 要通过链表实现. 解决思路: 初始时把两

20120918-双向链表类定义《数据结构与算法分析》

将新的节点插入双向链表的时候: iterator insert(iterator itr,const Object & x)//向双向链表中插入一个x节点 { Node *p = itr.current; theSize++; return iterator(p->prev = p->prev->next = new Node(x,p->prev,p)); } LIST类的删除节点的过程: //删除双向链表中的一个节点 iterator erase(iterator itr

韩顺平_PHP程序员玩转算法公开课(第一季)02_单链表在内存中存在形式剖析_学习笔记_源代码图解_PPT文档整理

文西马龙:http://blog.csdn.net/wenximalong/链表——最灵活的数据结构链表用来解决复杂的问题和算法是很方便的. 内容介绍1.什么是链表2.单向链表3.双向链表4.环形链表5.使用环形链表解决约瑟夫问题 链表——什么是链表链表是有序的列表,但是它在内存中是分散存储的. 链表无处不在,比如在操作系统中,文件和文件之间,文件块和文件块之间,是靠链表链接起来的.使用链表可以解决类似约瑟夫问题,排序,索引,二叉树,广义表... 链表——单链表的快速入门使用head头的单向链表

php实现单,双向链表,环形链表解决约瑟夫问题

传智播客PHP学院 韩顺平 PHP程序员玩转算法第一季  http://php.itcast.cn 聊天篇: 数学对我们编程来说,重不重要? 看你站在什么样的层次来说. 如果你应用程序开发,对数学要求不高 但是,如果你开发系统软件,比如(搜索/识别软件[图像,语言识别]/操作系统...)对数学高 建模.大量数学模型. 老师啊啊.我是学C++的.麻烦,谈哈对QT和MFC的看法嘛.前景什么的, 记住 : 打好基础,大有可为! 初中毕业能去传智学习吗? 学习It, 不管是java ,php ,c#,对

第十章 基本数据结构——链表

 链表 链表与数组的区别是链表中的元素顺序是有各对象中的指针决定的,相邻元素之间在物理内存上不一定相邻.采用链表可以灵活地表示动态集合.链表有单链表和双链表及循环链表.书中着重介绍了双链表的概念及操作,双链表L的每一个元素是一个对象,每个对象包含一个关键字和两个指针:next和prev.链表的操作包括插入一个节点.删除一个节点和查找一个节点,重点来说一下双向链表的插入和删除节点操作,图例如下: 链表是最基本的数据结构,凡是学计算机的必须的掌握的,在面试的时候经常被问到,关于链表的实现,百度一下就

数据结构(2)链表的应用

链表是一种基础数据结构,它是集合类的抽象数据结构类型中表示数据的合适类型.与数字结构不同之处在于,在链表中插入元素和删除元素都更加方便. 定义: 链表表示的一列元素,由一系列的节点(Node)构成,是一种递归数据结构.节点是一个能够包含任何类型数据的抽象实体,它所包含的指向节点的应用体现了他在链表中的作用. 构造: private class Node { public T Data; public Node Next; public Node(T data) { Data = data; }

最基础的动态数据结构:链表

什么是链表 链表是一种线性结构,也是最基础的动态数据结构.我们在实现动态数组.栈以及队列时,底层都是依托的静态数组,靠resize来解决固定容量的问题,而链表是真正的动态数据结构.学习链表这种数据结构,能够更深入的理解引用(或者指针)以及递归.其中链表分为单链链表和双链链表,本文中所介绍的是单链链表. 链表中的数据是存储在一个个的节点中,如下这是一个最基本的节点结构: class Node { E e; Node next; // 节点中持有下一个节点的引用 } 我们可以将链表想象成火车,每一节

数据结构线性表链表的C语言实现

                                                                                      数据结构线性表链表的C语言实现      说明:线性表是一种最简单的线性结构,也是最基本的一种线性结构,所以它不仅是学习中的重点,也是应用开发非常常用的一种数据结构.它可以分为顺序表和链表.它的主要操作是数据元素的插入,删除,以及排序等.接下来,本篇文章将对线性表链表的基本操作和运用进行详细的说明(包含在源代码的注释中),并给