C语言/C++实现栈操作

一、栈的概念

栈是一种常用的数据结构,它遵循先入后出(Last-In-First-Out,LIFO)的原则。栈的操作只在栈的一端进行,该端被称为栈顶,而另一端称为栈底。栈的基本操作包括压栈(入栈-push)和弹栈(出栈-pop),分别用于将元素添加到栈顶和从栈顶删除元素。

二、栈的实现

我们可以使用C语言中的数组来实现栈。下面是一个基本的栈的定义:

#define MAX_SIZE 100

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

在这里,我们使用了一个数组data来存储栈的元素,以及一个整数top来表示栈顶的位置。栈为空时,top的值为-1。

1、初始化栈

在使用栈之前,我们需要先将其进行初始化,可以通过将top设置为-1来实现:

//初始化栈 
void init(Stack *stack) {
    
    
	stack->top = -1;
	printf("初始化栈完成......\n");
}

2、判断栈是否为空

我们可以通过判断top的值是否为-1来确定栈是否为空:

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

3、判断栈是否已满

为了防止栈溢出,我们需要在执行push操作之前检查栈是否已满。当top的值等于MAX_SIZE-1时,表示栈已满:

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

4、执行压栈操作

压栈操作用于将元素添加到栈顶,首先需要判断栈是否已满,如果栈未满,将元素添加到top所指向的位置,并将top向上移动一个位置:

//入栈操作 
void push(Stack *stack, int element) {
    
    
    if (!isFull(stack)) {
    
    
        stack->data[++stack->top] = element;
        printf("完成一次入栈,入栈元素:%d\n",element);
    } else {
    
    
        printf("栈满,不能入栈。\n");
    }
}

5、执行弹栈操作

弹栈操作用于删除栈顶的元素,并返回该元素的值,首先需要判断栈是否为空,如果栈非空,返回top位置的元素并将top向下移动一个位置:

//出栈操作 
int pop(Stack *stack) {
    
    
    if (!isEmpty(stack)) {
    
    
        printf("完成一次出栈,");
		return stack->data[stack->top--];
    } else {
    
    
        printf("栈空,不能出栈\n");
        return -1;
    }
}

三、示例代码

下面是一个使用栈的简单示例代码,展示了如何进行压栈和弹栈操作:

#include <stdio.h>

//栈容 
#define MAX_SIZE 100

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

//初始化栈 
void init(Stack *stack) {
    
    
	stack->top = -1;
	printf("初始化栈完成......\n");
}

//判断栈是否为空 
int isEmpty(Stack *stack) {
    
    
    return stack->top == -1;
}

//判断是否栈满 
int isFull(Stack *stack) {
    
    
    return stack->top == MAX_SIZE - 1;
}

//入栈操作 
void push(Stack *stack, int element) {
    
    
    if (!isFull(stack)) {
    
    
        stack->data[++stack->top] = element;
        printf("完成一次入栈,入栈元素:%d\n",element);
    } else {
    
    
        printf("栈满,不能入栈。\n");
    }
}

//出栈操作 
int pop(Stack *stack) {
    
    
    if (!isEmpty(stack)) {
    
    
        printf("完成一次出栈,");
		return stack->data[stack->top--];
    } else {
    
    
        printf("栈空,不能出栈\n");
        return -1;
    }
}

//遍历栈内元素
void printStack(Stack *stack){
    
    
	printf("栈内元素为:");
	int index=stack->top;
	while(index>=0){
    
    
		printf("%d\t",stack->data[index--]);
	}
	printf("\n");
} 
int main() {
    
    
    Stack stack;
    init(&stack);

    push(&stack, 1);
    printStack(&stack);
    push(&stack, 2);
    printStack(&stack);
    push(&stack, 3);
    printStack(&stack);

    printf("出栈元素: %d\n", pop(&stack));
    printf("出栈元素: %d\n", pop(&stack));
    printf("出栈元素: %d\n", pop(&stack));

    return 0;
}

以上代码会输出以下结果:

Popped element: 3
Popped element: 2
Popped element: 1

这就是用C语言实现栈的基本操作的详细教程。希望这对你有所帮助!

猜你喜欢

转载自blog.csdn.net/qq_43884946/article/details/131235798