[알고리즘] 단순 연결 리스트를 이용한 스택(stack)

/*

연결 리스트, 링크드 리스트(linked list)는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 

데이터를 저장하는 자료 구조이다. 

이름에서 말하듯이 데이터를 담고 있는 노드들이 연결되어 있는데, 

노드의 포인터가 다음이나 이전의 노드와의 연결을 담당하게 된다. 

연결 리스트의 종류로는 단순 연결 리스트, 이중 연결 리스트 등이 있다. 

*/

// 단순 연결 리스트를 이용한 스택의 구현

 

class Node {

    public $key;

    public $next = Node;

 

$head = new Node;

$tail = new Node;

 

function init_stack() {

    Global $head, $tail;

 

    $head->next = $tail;

    $tail->next = $tail;

}

 

function clear_stack() {

    Global $head, $tail;

    $t = Node;

    $s = Node;

 

    $t = $head->next;

    while ($t != $tail) {

        $s = $t;

        $t = $t->next;

        $s = null;

    }

    $head->next = $tail;

}

 

function push($k) {

    Global $head, $tail;

    $t = new Node;

   

    if ($t == NULL) {

        println("   Out of memory...");        

    }

  

    $t->key = $k;

    $t->next = $head->next;

    $head->next = $t;

}

 

function pop() {

    Global $head, $tail;

    $t = new Node;

 

    if ($head->next == $tail)  /* if empty */ {

        println("  Stack underflow.");

        return -1;

    }

    $t = $head->next;

    $i = $t->key;

    $head->next = $t->next;

    $t = null;

    

    return $i;

}

 

function print_stack() {

    Global $head, $tail;

    $t = new Node;

 

    $t = $head->next;

    println("  Stack contents : Top ----> Bottom");

    while ($t != $tail) {

        println($t->key);

        $t = $t->next;

    }

}

 

init_stack();

 

println('Push 1, 2, 3');

push(1);

push(2);

push(3);

print_stack();

 

$i = pop();

println('Pop '.$i);

print_stack();

 

println('Push 4, 5, 6');

push(4);

push(5);

push(6);

print_stack();

 

println('Initialize stack');

clear_stack();

print_stack();

 

println('Now stack is empty,');

println('Pop');

$i = pop();

print_stack();

 

function println($str=''){

    echo $str.'<br />';

 

/* output

Push 1, 2, 3

Stack contents : Top ----> Bottom
3
2
1
Pop 3
Stack contents : Top ----> Bottom
2
1
Push 4, 5, 6
Stack contents : Top ----> Bottom
6
5
4
2
1
Initialize stack
Stack contents : Top ----> Bottom
Now stack is empty,
Pop
Stack underflow.

Stack contents : Top ----> Bottom 

*/

|
댓글을 작성하시려면 로그인이 필요합니다. 로그인

프로그램

+
제목 글쓴이 날짜 조회
11년 전 조회 2,031
11년 전 조회 2,277
11년 전 조회 664
11년 전 조회 1,531
11년 전 조회 1,049
11년 전 조회 3,662
11년 전 조회 1,481
11년 전 조회 1,471
11년 전 조회 1,616
11년 전 조회 3,716
11년 전 조회 3,683
11년 전 조회 3,495
11년 전 조회 1,138
11년 전 조회 3,520
11년 전 조회 2,724
11년 전 조회 3,277
11년 전 조회 777
11년 전 조회 2,539
11년 전 조회 2,514
11년 전 조회 2,600
11년 전 조회 1,584
11년 전 조회 2,050
11년 전 조회 1,382
11년 전 조회 1,181
11년 전 조회 1,773
11년 전 조회 1,085
11년 전 조회 3,969
11년 전 조회 3,748
11년 전 조회 1,378
11년 전 조회 2,621
11년 전 조회 1,037
11년 전 조회 1,847
11년 전 조회 3,448
11년 전 조회 3,752
11년 전 조회 4,671
11년 전 조회 1,069
11년 전 조회 1,632
11년 전 조회 3,036
11년 전 조회 1,206
11년 전 조회 1,215
11년 전 조회 1,811
11년 전 조회 1,087
11년 전 조회 2,349
11년 전 조회 1,859
11년 전 조회 3,941
11년 전 조회 2,383
11년 전 조회 4,648
11년 전 조회 1,419
11년 전 조회 1,271
11년 전 조회 1,926
11년 전 조회 1,893
11년 전 조회 1,473
11년 전 조회 1,107
11년 전 조회 1,745
11년 전 조회 1,129
11년 전 조회 1,238
11년 전 조회 1,433
11년 전 조회 1,258
11년 전 조회 1,013
11년 전 조회 2,191
11년 전 조회 2,016
11년 전 조회 3,190
11년 전 조회 1,161
11년 전 조회 920
11년 전 조회 1,020
11년 전 조회 2,889
11년 전 조회 1,136
11년 전 조회 1,344
11년 전 조회 860
11년 전 조회 1,643
11년 전 조회 1,630
11년 전 조회 1,036
11년 전 조회 1,214
11년 전 조회 902
11년 전 조회 861
11년 전 조회 1,696
11년 전 조회 1,017
11년 전 조회 918
11년 전 조회 1,041
11년 전 조회 1,203
11년 전 조회 873
11년 전 조회 917
11년 전 조회 1,389
11년 전 조회 960
11년 전 조회 1,423
11년 전 조회 953
11년 전 조회 1,067
11년 전 조회 1,137
11년 전 조회 886
11년 전 조회 916
11년 전 조회 1,141
11년 전 조회 2,070
11년 전 조회 922
11년 전 조회 941
11년 전 조회 872
11년 전 조회 1,289
11년 전 조회 938
11년 전 조회 851
11년 전 조회 1,160
11년 전 조회 1,504
🐛 버그신고