栈的实现与使用

一.栈(先进后出)

        限定在一端(表尾)进行插入或删除操作的线性表。表尾端称栈顶,表头端称栈底。

二.例子

例:若入栈顺序为abcdefg,出栈顺序为bdcfeag;则栈的容量最小为多少?

解:根据表的先进后出特点,得以下推论:

综上所述,该栈最小容量为3.

三.代码应用

        1.实现代码:

#include <stdio.h>  
#include <stdlib.h>  
  
#define MAX_SIZE 100 // 栈的最大容量  
  
typedef struct {  
    int data[MAX_SIZE]; // 存储栈元素  
    int top; // 栈顶指针,指向栈顶元素的下标  
} Stack;  
  
// 初始化栈  
void initStack(Stack *s) {  
    s->top = -1;  
}  
  
// 判断栈是否为空  
int isEmpty(Stack *s) {  
    return s->top == -1;  
}  
  
// 判断栈是否已满  
int isFull(Stack *s) {  
    return s->top == MAX_SIZE - 1;  
}  
  
// 入栈  
void push(Stack *s, int value) {  
    if (isFull(s)) {  
        printf("Stack is full!\n");  
        return;  
    }  
    s->data[++(s->top)] = value;  
}  
  
// 出栈  
int pop(Stack *s) {  
    if (isEmpty(s)) {  
        printf("Stack is empty!\n");  
        return -1;  
    }  
    return s->data[(s->top)--];  
}  
  
// 获取栈顶元素  
int peek(Stack *s) {  
    if (isEmpty(s)) {  
        printf("Stack is empty!\n");  
        return -1;  
    }  
    return s->data[s->top];  
}  
  
int main() {  
    Stack s;  
    initStack(&s);  
  
    push(&s, 1);  
    push(&s, 2);  
    push(&s, 3);  
    push(&s, 4);  
  
    printf("Top element: %d\n", peek(&s)); // 输出栈顶元素  
  
    while (!isEmpty(&s)) {  
        printf("%d ", pop(&s)); // 依次输出栈中元素并出栈  
    }  
    printf("\n");  
  
    return 0;  
}

        在这个示例中,我们定义了一个Stack结构体来表示栈,其中包含一个整型数组data用于存储栈元素,以及一个整型变量top表示栈顶指针。initStack函数用于初始化栈,isEmptyisFull函数分别用于判断栈是否为空和已满,push函数用于将元素入栈,pop函数用于将元素出栈,peek函数用于获取栈顶元素。在main函数中,我们创建了一个栈并进行了一些基本的入栈、出栈和获取栈顶元素操作。

        2.结果

                  ​​​​​​​        ​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我来挖坑啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值