当前位置:首页 > 行业动态 > 正文

怎么用c语言实现栈和队列

栈和队列是计算机科学中两种基本的数据结构,它们在算法设计和程序开发中具有广泛的应用,C语言作为一种通用的编程语言,提供了实现栈和队列的基本操作的功能,下面将详细介绍如何使用C语言实现栈和队列。

1、栈(Stack)

栈是一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作,栈的基本操作包括入栈(push)、出栈(pop)和查看栈顶元素(top)。

下面是使用C语言实现栈的代码:

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
    int data[MAX_SIZE];
    int top;
} Stack;
// 初始化栈
void init(Stack *stack) {
    stack>top = 1;
}
// 判断栈是否为空
int isEmpty(Stack *stack) {
    return stack>top == 1;
}
// 入栈
void push(Stack *stack, int value) {
    if (stack>top == MAX_SIZE 1) {
        printf("Stack is full!
");
        return;
    }
    stack>data[++stack>top] = value;
}
// 出栈
int pop(Stack *stack) {
    if (isEmpty(stack)) {
        printf("Stack is empty!
");
        return 1;
    }
    return stack>data[stack>top];
}
// 查看栈顶元素
int peek(Stack *stack) {
    if (isEmpty(stack)) {
        printf("Stack is empty!
");
        return 1;
    }
    return stack>data[stack>top];
}

上述代码定义了一个Stack结构体,包含了一个整型数组data和一个表示栈顶位置的整数top。init函数用于初始化栈,将栈顶位置设置为1。isEmpty函数用于判断栈是否为空,当栈顶位置为1时表示栈为空。push函数用于将元素压入栈顶,如果栈已满则输出错误信息。pop函数用于弹出栈顶元素,如果栈为空则输出错误信息并返回1。peek函数用于查看栈顶元素,如果栈为空则输出错误信息并返回1。

2、队列(Queue)

队列是一种先进先出(FIFO)的数据结构,允许在队头和队尾进行插入和删除操作,队列的基本操作包括入队(enqueue)、出队(dequeue)和查看队头元素(front)。

下面是使用C语言实现队列的代码:

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
    int data[MAX_SIZE];
    int front;
    int rear;
} Queue;
// 初始化队列
void init(Queue *queue) {
    queue>front = 0;
    queue>rear = 0;
}
// 判断队列是否为空
int isEmpty(Queue *queue) {
    return queue>front == queue>rear;
}
// 入队
void enqueue(Queue *queue, int value) {
    if (queue>rear == MAX_SIZE 1) {
        printf("Queue is full!
");
        return;
    }
    queue>data[++queue>rear] = value;
}
// 出队
int dequeue(Queue *queue) {
    if (isEmpty(queue)) {
        printf("Queue is empty!
");
        return 1;
    }
    return queue>data[queue>front++];
}
// 查看队头元素
int peek(Queue *queue) {
    if (isEmpty(queue)) {
        printf("Queue is empty!
");
        return 1;
    }
    return queue>data[queue>front];
}
0