目录
6.5~7 数组初值;字符串、字符数组、字符串数组;类型定义 typedef
本文介绍了C语言使用数组实现栈和队列,及其相关操作
栈(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() 出队并打印出队的元素。