栈(Stack)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 100
typedef struct {
int top;
int data[MAX_SIZE];
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
bool isEmpty(Stack *s) {
return s->top == -1;
}
bool push(Stack *s, int item) {
if (s->top >= MAX_SIZE - 1) {
return false;
}
s->data[++s->top] = item;
return true;
}
bool pop(Stack *s, int *item) {
if (isEmpty(s)) {
return false;
}
*item = s->data[s->top--];
return true;
}
bool peek(Stack *s, int *item) {
if (isEmpty(s)) {
return false;
}
*item = s->data[s->top];
return true;
}
int main() {
Stack s;
initStack(&s);
push(&s, 1);
push(&s, 2);
push(&s, 3);
int topItem;
peek(&s, &topItem);
printf("栈顶元素是: %d\n", topItem);
int poppedItem;
pop(&s, &poppedItem);
printf("出栈的元素是: %d\n", poppedItem);
return 0;
}
队列(Queue)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 100
typedef struct {
int front;
int rear;
int data[MAX_SIZE];
} Queue;
void initQueue(Queue *q) {
q->front = 0;
q->rear = -1;
}
bool isEmpty(Queue *q) {
return q->front > q->rear;
}
bool isFull(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
bool enqueue(Queue *q, int item) {
if (isFull(q)) {
return false;
}
q->data[++q->rear] = item;
q->rear %= MAX_SIZE;
return true;
}
bool dequeue(Queue *q, int *item) {
if (isEmpty(q)) {
return false;
}
*item = q->data[q->front++];
q->front %= MAX_SIZE;
return true;
}
bool peek(Queue *q, int *item) {
if (isEmpty(q)) {
return false;
}
*item = q->data[q->front];
return true;
}
int main() {
Queue q;
initQueue(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
int frontItem;
peek(&q, &frontItem);
printf("队头元素是: %d\n", frontItem);
int dequeuedItem;
dequeue(&q, &dequeuedItem);
printf("出队的元素是: %d\n", dequeuedItem);
return 0;
}