CS/C

C언어로 스택/큐 구현하기

munsik22 2025. 4. 12. 20:52

스택

#include <stdio.h>
#include <stdlib.h>

#define MAX 100

typedef struct Stack {
    int arr[MAX];
    int top;
} Stack;

void initStack(Stack *s) {
    s->top = -1;
}

int isEmpty(Stack *s) {
    return s->top == -1;
}

int isFull(Stack *s) {
    return s->top >= MAX - 1;
}

void push(Stack *s, int value) {
    if (isFull(s)) return;
    s->arr[++(s->top)] = value;
}

int pop(Stack *s) {
    if (isEmpty(s)) return -1;
    return s->arr[(s->top)--];
}

int peek(Stack *s) {
    if (isEmpty(s)) return -1;
    return s->arr[s->top];
}

int main() {
    Stack s;
    initStack(&s);

    push(&s, 10);
    push(&s, 20);
    push(&s, 30);

    printf("Stack Top: %d\n", peek(&s));

    printf("%d was popped.\n", pop(&s));
    printf("Stack Top: %d\n", peek(&s));

    return 0;
}

#include <stdio.h>
#include <stdlib.h>

#define MAX 100

typedef struct Queue {
    int arr[MAX];
    int front;
    int rear;
} Queue;

void initQueue(Queue *q) {
    q->front = -1;
    q->rear = -1;
}

int isEmpty(Queue *q) {
    return q->front == -1 || q->front > q->rear;
}

int isFull(Queue *q) {
    return q->rear >= MAX - 1;
}

void enqueue(Queue *q, int value) {
    if (isFull(q)) return;
    }
    if (q->front == -1) {
        q->front = 0;
    }
    q->arr[++(q->rear)] = value;
}

int dequeue(Queue *q) {
    if (isEmpty(q)) return -1;
    }
    return q->arr[(q->front)++];
}

int peek(Queue *q) {
    if (isEmpty(q)) return -1;
    return q->arr[q->front];
}

int main() {
    Queue q;
    initQueue(&q);

    enqueue(&q, 10);
    enqueue(&q, 20);
    enqueue(&q, 30);

    printf("Queue Front: %d\n", peek(&q));

    printf("%d was dequeued.\n", dequeue(&q));
    printf("Queue Front: %d\n", peek(&q));

    return 0;
}

 

'CS > C' 카테고리의 다른 글

C언어로 이진 탐색 트리 구현하기  (0) 2025.04.15
C언어로 이진 트리 구현하기  (0) 2025.04.12
GPT야, 3.9와 3.11 중에 무엇이 더 큰 수야?  (0) 2025.02.07
C언어로 BFS 구현하기  (0) 2025.02.07
C언어로 DFS 구현하기  (0) 2025.02.07