스택
#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;
}