본문 바로가기

알고리즘 문제풀이

[CS] Stack, Queue (Heap기반)

반응형

[HEAP기반 - Stack]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <stdio.h>
#include <malloc.h>
 
typedef struct _stk
{
    int num;
    struct _stk * next; 
}STACK;
 
STACK * Sptr = (STACK *)0;
 
void main(void)
{
 
}
 
// 작성한 코드를 아래에 넣으시오.
 
int Push_Stack(STACK *data)
{
    STACK * p;
 
    p = calloc(1sizeof(STACK));
    if(p == (void *)0x0return -1;
    *= *data;
    p->next = Sptr;
    Sptr = p;
 
    return 1;
}
 
int Pop_Stack(STACK *p)
{
    STACK * temp = Sptr;
 
    if(Sptr == (STACK *)0x0return -1;
 
    *= *Sptr;
    Sptr = Sptr->next;
    free(temp);
 
    return 1;
}
 
int Print_Stack(void)
{
    int i = 0;
 
    STACK * temp = Sptr;
 
    while(temp)
    {
        printf("[%d] addr=0x%.8x, num=%d, next=0x%.8x\n", i++, temp, temp->num, temp->next);
        temp = temp->next;
    };
 
    return i;
}
 
int Count_Full_Data_Stack(void)
{
    int i = 0;
 
    STACK * temp = Sptr;
 
    while(temp) 
    {
        temp = temp->next;
        i++;
    }
 
    return i;
}
cs

 

[Heap기반 - Linear Queue]

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <stdio.h>
#include <malloc.h>
 
typedef struct _que
{
    int num;
    struct _que * next; 
}QUEUE;
 
QUEUE * Wrptr = (QUEUE *)0;;
QUEUE * Rdptr = (QUEUE *)0;;
 
void main(void)
{
 
}
 
// 작성한 코드를 아래에 넣으시오.
 
int In_Queue(QUEUE * data)
{
    QUEUE * p;
 
    p = calloc(1sizeof(QUEUE));
    if(p == (void *)0x0return -1;
    *= *data;
    p->next = (QUEUE *)0;
    if(Wrptr) Wrptr->next = p;
    Wrptr = p;
    if(Rdptr == (void *)0x0) Rdptr = p;
 
    return 1;
}
 
int Out_Queue(QUEUE * p)
{
    QUEUE * temp = Rdptr;
 
    if(Rdptr == (QUEUE *)0return -1;
    *= *Rdptr;
    Rdptr = Rdptr->next;
    if(Rdptr == (QUEUE *)0) Wrptr = (QUEUE *)0;
    free(temp);
 
    return 1;
}
 
int Print_Queue(void)
{
    int i = 0;
 
    QUEUE * temp = Rdptr;
 
    while(temp)
    {
        printf("[%d] addr=0x%.8x, num=%d, next=0x%.8x\n", i++, temp, temp->num, temp->next);
        temp = temp->next;
    };
 
    return i;
}
 
int Count_Full_Data_Queue(void)
{
    int i = 0;
    QUEUE * temp = Rdptr;
 
    while(temp) 
    {
        temp = temp->next;
        i++;
    }
 
    return i;
}
cs

 

반응형

'알고리즘 문제풀이' 카테고리의 다른 글

[CS] Merge Sort  (0) 2020.10.07
[CS] Quick Sort  (0) 2020.10.07
[CS] Stack, Queue(Linear, Circular)  (0) 2020.10.07
[Hash] Chainning 방식  (0) 2020.10.07
[Hash]Open Address 방식  (0) 2020.10.07