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

· 2014-09-24 (수) 18:35:58 · 4665 · 1

/*

연결 리스트, 링크드 리스트(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 

*/

|

댓글 1개

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

프로그램

8,188건
+
제목 글쓴이 날짜 조회
15-11-20 조회 2,430
15-11-20 조회 2,434
15-11-20 조회 2,531
15-11-18 조회 2,551
15-11-18 조회 2,597
15-11-18 조회 2,517
15-11-17 조회 2,769
15-11-17 조회 2,532
15-11-17 조회 2,480
15-11-16 조회 2,547
15-11-16 조회 2,530
15-11-16 조회 2,718
15-11-15 조회 2,727
15-11-15 조회 2,535
15-11-15 조회 2,650
15-11-09 조회 2,822
15-11-09 조회 2,613
15-11-09 조회 2,681
15-11-06 조회 3,258
15-11-05 조회 2,694
15-11-05 조회 2,627
15-11-05 조회 2,739
15-11-04 조회 2,687
15-11-04 조회 2,648
15-11-04 조회 2,656
15-11-04 조회 2,940
15-11-04 조회 2,732
15-11-03 조회 2,748
15-11-02 조회 2,763
15-11-02 조회 2,551
15-11-02 조회 2,574
15-10-31 조회 2,495
15-10-27 조회 2,739
15-10-23 조회 2,652
15-10-23 조회 2,698
15-10-19 조회 3,799
15-10-15 조회 3,407
15-08-03 조회 3,090
15-07-29 조회 2,912
15-07-12 조회 3,351
15-05-07 조회 4,964
15-05-06 조회 4,597
15-05-06 조회 5,284
15-04-04 조회 4,388
15-04-04 조회 4,009
15-04-01 조회 5,631
15-02-10 조회 4,373
15-01-31 조회 4,389
15-01-23 조회 4,052
14-12-30 조회 3,594
14-12-23 조회 3,794
14-12-02 조회 4,174
14-10-17 조회 4,612
14-10-17 조회 4,760
14-10-07 조회 4,100
14-10-07 조회 5,265
14-10-04 조회 4,382
14-09-24 조회 4,666
14-09-24 조회 4,626
14-09-24 조회 4,118
14-09-23 조회 3,884
14-09-22 조회 3,591
14-09-21 조회 3,987
14-09-21 조회 4,219
14-09-21 조회 3,681
14-09-20 조회 4,246
14-09-19 조회 3,822
14-09-19 조회 3,474
14-09-19 조회 3,999
14-09-19 조회 3,690
14-09-18 조회 3,497
14-09-18 조회 3,947
14-09-18 조회 4,240
14-09-18 조회 3,857
14-09-18 조회 3,790
14-09-18 조회 3,836
14-09-18 조회 3,921
14-09-18 조회 4,666
14-09-17 조회 3,704
14-09-15 조회 3,786
14-09-11 조회 4,064
14-08-26 조회 3,961
14-08-26 조회 3,672
14-08-26 조회 3,419
14-08-26 조회 3,930
14-08-26 조회 3,811
14-08-26 조회 3,660
14-08-26 조회 3,774
14-08-26 조회 3,845
14-08-26 조회 3,630
14-08-26 조회 3,836
14-08-26 조회 3,807
14-08-26 조회 3,785
14-08-26 조회 3,848
14-08-26 조회 3,587
14-08-26 조회 3,592
14-08-26 조회 3,781
14-08-26 조회 3,475
14-08-26 조회 3,550
14-08-26 조회 3,346