使用c语言实现栈和队列的基本操作的全部代码
时间: 2024-12-11 07:30:15 浏览: 19
在C语言中,我们可以使用数组或链表来实现栈(Stack)和队列(Queue)。这里分别提供基本的栈和队列的结构体定义、初始化以及常见操作的代码示例。
**1. 栈(Stack)实现:**
```c
#include <stdio.h>
#define MAX_SIZE 50
typedef struct Stack {
int top;
int data[MAX_SIZE];
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return (s->top == -1);
}
// 向栈顶压入元素
void push(Stack *s, int value) {
if (isEmpty(s)) {
s->top = 0;
} else {
s->data[++(s->top)] = value;
}
}
// 从栈顶弹出元素
int pop(Stack *s) {
if (isEmpty(s))
return -1; // 返回错误值
return s->data[s->top--];
}
// 获取栈顶元素但不删除
int peek(Stack *s) {
return isEmpty(s) ? -1 : s->data[s->top];
}
```
**2. 队列(Queue)实现:**
```c
#include <stdio.h>
#define MAX_SIZE 50
typedef struct Queue {
int front, rear;
int data[MAX_SIZE];
} Queue;
// 初始化队列
void init(Queue *q) {
q-1;
}
// 判断队列是否为空
int isEmpty(Queue *q) {
return (q->front == q->rear);
}
// 入队操作
void enqueue(Queue *q, int value) {
if ((q->rear + 1) % MAX_SIZE == q->front) {
printf("Queue is full.\n");
return;
}
q->rear = (q->rear + 1) % MAX_SIZE;
q->data[q->rear] = value;
}
// 出队操作
int dequeue(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty.\n");
return -1;
}
int removedValue = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return removedValue;
}
```
阅读全文