C语言实现经典数据结构代码---栈和队列

目录

简介

使用数组实现栈

队列

简介

使用数组实现队列


简介

栈是一种常见的数据结构,它遵循“先进后出”的原则,即最后进入栈的元素最先被访问。栈的实现可以使用数组或链表来存储数据。

使用数组实现栈

定义栈结构:首先需要定义一个结构体来表示栈,其中包含一个数组用于存储数据和一个指针表示栈顶位置。

#define MAX_SIZE 100

typedef struct Stack {
    int data[MAX_SIZE];
    int top;
} Stack;

初始化栈:将栈顶指针设置为-1,表示栈为空。

void initialize(Stack* stack) {
    stack->top = -1;
}

入栈操作:将元素插入到栈顶位置,需要将栈顶指针增加1,并将元素存储在栈顶位置。

void push(Stack* stack, int item) {
    if (stack->top == MAX_SIZE - 1) {
        printf("Stack is full\n");
    } else {
        stack->data[++stack->top] = item;
    }
}

出栈操作:从栈顶位置移除元素,需要将栈顶指针减少1,并返回栈顶元素。

int pop(Stack* stack) {
    if (stack->top == -1) {
        printf("Stack is empty\n");
        return -1;
    } else {
        return stack->data[stack->top--];
    }
}

获取栈顶元素:返回栈顶位置的元素,但不将其从栈中移除。

int peek(Stack* stack) {
    if (stack->top == -1) {
        printf("Stack is empty\n");
        return -1;
    } else {
        return stack->data[stack->top];
    }
}

判断栈是否为空:根据栈顶指针是否为-1来判断栈是否为空。

int isEmpty(Stack* stack) {
    return stack->top == -1;
}

判断栈是否已满:根据栈顶指针是否达到数组的最大索引来判断栈是否已满。

int isFull(Stack* stack) {
    return stack->top == MAX_SIZE - 1;
}

使用数组实现的栈具有固定的大小,当栈满时无法再插入元素。如果需要实现一个可以动态扩展大小的栈,可以使用链表来实现栈的操作。

队列

简介

队列是一种常见的数据结构,它遵循“先进先出”的原则,即最先进入队列的元素最先被访问。队列的实现可以使用数组或链表来存储数据。

使用数组实现队列

定义队列结构:首先需要定义一个结构体来表示队列,其中包含一个数组用于存储数据,一个front指针表示队列的第一个元素位置,一个rear指针表示队列的最后一个元素位置。

#define MAX_SIZE 100

typedef struct Queue {
    int data[MAX_SIZE];
    int front;
    int rear;
} Queue;

初始化队列:将front和rear指针均设置为-1,表示队列为空。

void initialize(Queue* queue) {
    queue->front = -1;
    queue->rear = -1;
}

入队操作:将元素插入到队列的末尾,需要将rear指针增加1,并将元素存储在rear指针位置。

void enqueue(Queue* queue, int item) {
    if (queue->rear == MAX_SIZE - 1) {
        printf("Queue is full\n");
    } else {
        if (queue->front == -1) {
            queue->front = 0;
        }
        queue->data[++queue->rear] = item;
    }
}

出队操作:从队列的第一个元素位置移除元素,需要将front指针增加1,并返回移除的元素。

int dequeue(Queue* queue) {
    if (queue->front == -1 || queue->front > queue->rear) {
        printf("Queue is empty\n");
        return -1;
    } else {
        return queue->data[queue->front++];
    }
}

判断队列是否为空:根据front和rear指针的位置关系来判断队列是否为空。

int isEmpty(Queue* queue) {
    return queue->front == -1 || queue->front > queue->rear;
}

判断队列是否已满:根据rear指针是否达到数组的最大索引来判断队列是否已满。

int isFull(Queue* queue) {
    return queue->rear == MAX_SIZE - 1;
}

使用数组实现的队列具有固定的大小,当队列满时无法再插入元素。如果需要实现一个可以动态扩展大小的队列,可以使用链表来实现队列的操作。

猜你喜欢

转载自blog.csdn.net/L888666Q/article/details/131415726