维吉尼亚加密
要求实现用户输入一个数使得26个字母的排列发生变化,例如用户输入3,使得结果为DEFHIJKLMNOPQRSTUVWXYZABC,
同时需要支持负数,使得输入-3时,结果为:XYZABCDEFGHIJKLMNOPQRSTUVW。实现位置的前后都能移动且数据都是连着的,当然数据结构选择双向循环链表啦
<?php
class node{
public $data;
public $prior;
public $next;
}
function init(){
$head = new node();
$head->prior = $head->next = null;
$cur = $head;
for($i=0;$i<26;$i++){
$node = new node();
$node->data = chr(ord("A")+$i);
$node->prior = $cur;
$node->next = $cur->next;
$cur->next = $node;
$cur = $node;
}
$node->next = $head->next;
$head->next->prior = $node;
return $head;
}
function change($head,$i){
if($i>0){
while($i--){
$head = $head->next;
}
$head = $head->next;
}
if($i<0){
$head = $head->next;
while($i++){
$head = $head->prior;
}
}
return $head;
}
$head = init();
$h = change($head,-5);
for($i=0;$i<26;$i++){
echo $h->data;
$h = $h->next;
}