php-约瑟夫环-循环链表
2015-02-06 16:57
381 查看
</pre><pre name="code" class="php">//单个节点 class node { //初始化变量,包括存储的内容 和 下一个数据的指针 public $id = 0; public $data = ''; public $next = null; //构造函数,设置存储内容的数据 public function __construct($id,$nodedata){ $this->id = $id; $this->data = $nodedata; } } class singleLink { public $head = ''; public $size = 0; public function insert($id,$value,$prenodeid = 0){ $node = new node($id,$value); //空链表,直接添加 if ($this->size == 0){ $this->head = $node; } elseif ($prenodeid == 0) { //如果不是空链表,且并没有指定在某一个节点前添加 //则在当前节点前添加 $node->next = $this->head; $this->head = $node; } else { //在某一节点后添加新节点 $cruntnode = $this->head; while($cruntnode->next != null ){ if($cruntnode->next->id == $prenodeid){ $node->next = $cruntnode->next; $cruntnode->next = $node; break; } $cruntnode = $cruntnode->next; } } $this->size++; return $this; } public function edit($id,$value){ $flag = false; $current = $this->head; while(@$current->id !=null){ if($current->id == $id){ $current->data = $value; $flag = true; break; } $current = $current->next; } return $flag; } public function getnode($id=0){ $current = $this->head; $i=1; while($i <= $this->size){ if($i == $id){ $node = $current; break; } $current = $current->next; $i++; } return $node; } public function sort(){ } public function delete($id){ $flag = false; $current = $this->head; while(@$current->id !=null){ if($current->next->id == $id){ $current->next = $current->next->next; $this->size--; $flag = true; break; } $current = $current->next; } return $flag; } function makecircle(){ $lastnode=$this->getnode($this->size); //获取最后一个节点 //var_dump($lastnode);exit; $lastnode->next=$this->head; //变为循环单链表 } public function findking($m){ $current=$this->head; $num = 1 ; while( $current->next != $current ){ if( $num == $m-1 ){ $current->next = $current->next->next; //舍弃了第m个节点 $current = $current->next ; //往后移动一位 $num = 1; //重置m为 1 continue; } $current=$current->next; $num++ ; } echo " \$m=$m ,大王就是: ", $current->data; } } $linklist = new singleLink(); $linklist->insert(1,'hello'); $linklist->insert(2,'my'); $linklist->insert(3,'love'); $linklist->insert(4,'haha4'); $linklist->insert(5,'haha5'); $linklist->insert(6,'haha6'); $linklist->insert(7,'haha7'); $linklist->insert(8,'haha8')->insert(9,'haha9')->insert(10,'haha10')->insert(11,'haha11'); $linklist->makecircle(); $linklist->findking(4);
相关文章推荐
- 单循环链表解决约瑟夫环问题
- 约瑟夫环的循环链表实现
- 循环链表 约瑟夫环问题实现
- 用单向循环链表解决约瑟夫环(Joseph)问题
- 用单向循环链表实现约瑟夫环
- 用个循环链表解决约瑟夫环问题
- java单向循环链表实现约瑟夫环
- 链表初解(三)——约瑟夫环之循环链表实现
- 循环链表解约瑟夫环问题
- [转]用单向循环链表解决约瑟夫环问题
- 约瑟夫环问题(不带头结点单循环链表实现和数组实现)
- 单向循环链表--约瑟夫环
- 循环链表解决约瑟夫环问题
- 数据结构:循环单向链表——约瑟夫环
- 使用C#循环链表解决约瑟夫环的问题
- 不使用循环链表,约瑟夫环
- 单向循环链表的实现以及约瑟夫环的实现
- C++循环链表之约瑟夫环的实现方法
- 约瑟夫环问题 【循环链表的应用】
- 数据结构 循环链表的应用:约瑟夫环问题