Визуальное Руководство Объяснения, необходимое для реверсирования Связанного списка datastructure код?

Изменение того, которое я использовал в течение достаточно долгого времени:

CREATE FUNCTION [widget].[properCase](@string varchar(8000)) RETURNS varchar(8000) AS
BEGIN   
    SET @string = LOWER(@string)
    DECLARE @i INT
    SET @i = ASCII('a')
    WHILE @i <= ASCII('z')
    BEGIN
        SET @string = REPLACE( @string, ' ' + CHAR(@i), ' ' + CHAR(@i-32))
        SET @i = @i + 1
    END
    SET @string = CHAR(ASCII(LEFT(@string, 1))-32) + RIGHT(@string, LEN(@string)-1)
    RETURN @string
END

можно легко изменить для обработки символов после объектов кроме пробелов, если Вы хотели.

6
задан IAdapter 26 September 2009 в 21:30
поделиться

4 ответа

В PHP есть много предопределенных констант , которые часто бывают полезными.

Здесь PHP_OS - это то, что вы ищете.


Для Например, на моем текущем компьютере этот код:

var_dump(PHP_OS);

дает:

string 'Linux' (length=5)


У вас есть несколько примеров и сравнений с тем, что функция php_uname может предоставить вам на странице руководства в php_uname ; например (цитата) :

<?php
echo php_uname();
echo PHP_OS;

/* Some possible outputs:
Linux localhost 2.4.21-0.13mdk #1 Fri Mar 14 15:08:06 EST 2003 i686
Linux

FreeBSD localhost 3.2-RELEASE #15: Mon Dec 17 08:46:02 GMT 2001
FreeBSD

Windows NT XN1 5.1 build 2600
WINNT
*/

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    echo 'This is a server using Windows!';
} else {
    echo 'This is a server not using Windows!';
}

На этой странице также написано:

Для названия только действующего системы, рассмотрите возможность использования PHP_OS постоянно, но имейте в виду это константа будет содержать операционную Следующая строка current-> next = result; делает следующее:

// NULL<-a  b ... (notice there is no longer a pointer from a to b)

Тогда у нас есть result = current; который устанавливает result в a (опять же, достаточно просто). И, наконец, у нас есть все важные current = next; , которые устанавливают current в b .

Итак, на следующей итерации цикла while, с следующий установлен на b , результат установлен на a , а текущий установлен на b , мы начинаем сначала:

next = current->next;

// NULL<-a<-b  c ...
current->next = result;

result = current;

Затем делаем это снова:

next = current->next;

// NULL<-a<-b<-c  d ...
current->next = result;

result = current;

Когда мы добрались до последнего элемента в связанном списке ( e в этом примере), происходит следующее:

next = current->next; // next becomes NULL

// NULL<-a<-b<-c<-d<-e
current->next = result;

result = current; // result is now e

current = next; // current is now NULL

Теперь , поскольку current имеет значение NULL, цикл while завершается, и у нас остается:

*headRef = result;

который,

11
ответ дан 8 December 2019 в 16:05
поделиться

Посетите этот сайт для визуального представления.
Похоже, хорошее объяснение проекта здесь тоже (см. Метод 3).

2
ответ дан 8 December 2019 в 16:05
поделиться

список выглядел так:

=>(1) => => => => => => => => =>(10)

мы перевернули каждую часть списка

<=(1) => => => => => => => => =>(10)
<=(1) <= => => => => => => => =>(10)
<=(1) <= <= => => => => => => =>(10)
...
<=(1) <= <= <= <= <= <= <= <= <=(10)

, так что теперь начало находится в конце, и мы можем посмотреть на список с другой точки и увидеть:

=>(10) => => => => => => => => =>(1)
1
ответ дан 8 December 2019 в 16:05
поделиться

Я нарисовал точечную диаграмму, которая, как мне кажется, графически объяснит, что происходит:

thumbnail

Ссылка на полноразмерное изображение

А вот (небрежно) источник точек на случай, если кому-то интересно:

digraph g {
    label = "Start"
    subgraph cluster_1
    {
        a1 -> b1 -> c1;
        current1 -> a1;
        result1
        a1 [label="a"]
        b1 [label="b"]
        c1 [label="c"]
        current1 [label="current"]
        result1 [label="result"]
    }
    label = "Once through loop"
    subgraph cluster_2
    {
        current2 -> b2;
        result2 -> a2;
        b2 -> c2;
        a2 [label="a"]
        b2 [label="b"]
        c2 [label="c"]
        current2 [label="current"]
        result2 [label="result"]
    }
    label = "Twice through loop"
    subgraph cluster_3
    {
        current3 -> c3;
        result3 -> b3;
        b3 -> a3;
        a3 [label="a"]
        b3 [label="b"]
        c3 [label="c"]
        current3 [label="current"]
        result3 [label="result"]
    }
    label = "Final"
    subgraph cluster_4
    {
        result4 -> c4 -> b4 -> a4;
        a4 [label="a"]
        b4 [label="b"]
        c4 [label="c"]
        current4 [label="current"]
        result4 [label="result"]
    }
    label = ""

}
3
ответ дан 8 December 2019 в 16:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: