目录
前言
六、批量数据组织——数组
6.1~3 数组基础知识
6.4 线性表——分类与检索
6.5~7 数组初值;字符串、字符数组、字符串数组;类型定义 typedef
6.8 线性表—栈和队列
6.8.1 栈(Stack)
全局变量
isEmpty()
isFull()
push()
pop()
测试
6.8.2 队列(Queue)
全局变量
isEmpty()
isFull()
enqueue()
dequeue()
测试
本文介绍了C语言使用数组实现栈和队列,及其相关操作
【重拾C语言】六、批量数据组织(一)数组(数组类型、声明与操作、多维数组;典例:杨辉三角、矩阵乘积、消去法)-CSDN博客https://blog.csdn.net/m0_63834988/article/details/133580645?spm=1001.2014.3001.5502
【重拾C语言】六、批量数据组织(二)线性表——分类与检索(主元排序、冒泡排序、插入排序、顺序检索、对半检索)_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/133620693?spm=1001.2014.3001.5501
【重拾C语言】六、批量数据组织(三)数组初值;字符串、字符数组、字符串数组;类型定义 typedef_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/133660998?spm=1001.2014.3001.5501
栈(Stack)和队列(Queue)是常用的线性数据结构。在C语言中,可以使用数组或链表来实现栈和队列。
#define MAX_SIZE 100
int stack[MAX_SIZE];
int top = -1;
MAX_SIZE
,它表示栈的最大容量。stack
,用于存储栈中的元素。top
,用于表示栈顶的索引,默认值为 -1,表示栈为空。isEmpty()
检查栈是否为空。如果栈为空,返回值为 1,否则返回值为 0。
int isEmpty() {
return top == -1;
}
isFull()
检查栈是否已满。如果栈已满,返回值为 1,否则返回值为 0。
int isFull() {
return top == MAX_SIZE - 1;
}
push()
将元素压入栈中。首先检查栈是否已满,如果已满则打印提示信息并返回,否则将 data
压入栈顶,然后将 top
值加 1。
void push(int data) {
if (isFull()) {
printf("Stack is full. Cannot push element.\n");
return;
}
stack[++top] = data;
}
pop()
从栈中弹出并返回栈顶元素。首先检查栈是否为空,如果为空则打印提示信息并返回 -1,否则将栈顶元素返回,然后将 top
值减 1。
int pop() {
if (isEmpty()) {
printf("Stack is empty. Cannot pop element.\n");
return -1;
}
return stack[top--];
}
#include
#define MAX_SIZE 100
int stack[MAX_SIZE];
int top = -1;
int isEmpty() {
return top == -1;
}
int isFull() {
return top == MAX_SIZE - 1;
}
void push(int data) {
if (isFull()) {
printf("Stack is full. Cannot push element.\n");
return;
}
stack[++top] = data;
}
int pop() {
if (isEmpty()) {
printf("Stack is empty. Cannot pop element.\n");
return -1;
}
return stack[top--];
}
int main() {
push(10);
push(20);
push(30);
printf("Popped element: %d\n", pop());
printf("Popped element: %d\n", pop());
return 0;
}
push(10)
将元素 10 压入栈中。push(20)
将元素 20 压入栈中。push(30)
将元素 30 压入栈中。pop()
弹出栈顶元素,并将其打印出来。pop()
弹出栈顶元素,并将其打印出来。#define MAX_SIZE 100
int queue[MAX_SIZE];
int front = -1;
int rear = -1;
MAX_SIZE
,它表示队列的最大容量。queue
,用于存储队列中的元素。front
和 rear
,分别表示队列的前端和后端的索引,默认值均为 -1,表示队列为空。isEmpty()
检查队列是否为空。如果队列为空,返回值为 1,否则返回值为 0。
int isEmpty() {
return front == -1;
}
isFull()
检查队列是否已满。如果队列已满,返回值为 1,否则返回值为 0。
int isFull() {
return (rear + 1) % MAX_SIZE == front;
}
enqueue()
将元素入队。首先检查队列是否已满,如果已满则打印提示信息并返回,否则根据队列的循环性质更新 rear
的值,并将 data
存储到相应位置。
void enqueue(int data) {
if (isFull()) {
printf("Queue is full. Cannot enqueue element.\n");
return;
}
if (isEmpty()) {
front = 0;
}
rear = (rear + 1) % MAX_SIZE;
queue[rear] = data;
}
dequeue()
用于从队列中出队并返回队首元素。首先检查队列是否为空,如果为空则打印提示信息并返回 -1,否则取出队首元素并根据队列的循环性质更新 front
和 rear
的值。
int dequeue() {
if (isEmpty()) {
printf("Queue is empty. Cannot dequeue element.\n");
return -1;
}
int data = queue[front];
if (front == rear) {
front = -1;
rear = -1;
} else {
front = (front + 1) % MAX_SIZE;
}
return data;
}
#include
#define MAX_SIZE 100
int queue[MAX_SIZE];
int front = -1;
int rear = -1;
int isEmpty() {
return front == -1;
}
int isFull() {
return (rear + 1) % MAX_SIZE == front;
}
void enqueue(int data) {
if (isFull()) {
printf("Queue is full. Cannot enqueue element.\n");
return;
}
if (isEmpty()) {
front = 0;
}
rear = (rear + 1) % MAX_SIZE;
queue[rear] = data;
}
int dequeue() {
if (isEmpty()) {
printf("Queue is empty. Cannot dequeue element.\n");
return -1;
}
int data = queue[front];
if (front == rear) {
front = -1;
rear = -1;
} else {
front = (front + 1) % MAX_SIZE;
}
return data;
}
int main() {
enqueue(10);
enqueue(20);
enqueue(30);
printf("Dequeued element: %d\n", dequeue());
printf("Dequeued element: %d\n", dequeue());
return 0;
}
enqueue(10)
将元素 10 入队。enqueue(20)
将元素 20 入队。enqueue(30)
将元素 30 入队。dequeue()
出队并打印出队的元素。dequeue()
出队并打印出队的元素。