数据结构 c++用栈实现四则运算_经典数据结构与算法(一):Python/C/C ++实现堆栈和队列...

 一、堆栈   

堆栈是编程中有用的数据结构。就像一堆盘子彼此叠放。

8b538c8109aa6dc4eac27b2edf7816bd.png
堆栈表示类似于一堆盘子

想一想用这样一堆盘子可以做的事情

  • 在上面放一个新盘子

  • 卸下顶部盘子

  • 持续来回做实验就知道了堆栈的意义

如果要将板放在底部,则必须先卸下顶部的所有板。这种安排称为“后进先出”-放置的最后一个元素是第一个外出元素。


LIFO堆栈原理

用编程的术语来说,将一个元素放在堆栈的顶部称为“推”,而将一个元素删除则称为“弹出”。

c7b8054691f93fba68a6f83cbc60cea8.png
堆栈推入和弹出操作

在上图中,尽管元顶部3最后才保留,但它首先被移除-因此它遵循后进先出(LIFO)原则。


堆栈的基本操作

堆栈是一个对象,或更具体地说,是一个允许执行以下操作的抽象数据结构(ADT):

  • Push:将元素添加到堆栈顶部

  • Pop:从堆栈顶部删除元素

  • IsEmpty:检查堆栈是否为空

  • IsFull:检查堆栈是否已满

  • Peek:获取顶部元素的值而不删除它


堆栈数据结构的工作

操作如下:

  1. 称为TOP用于跟踪堆栈中的顶部元素。

  2. 初始化堆栈时,将其值设置为-1,以便可以通过比较来检查堆栈是否为空TOP == -1

  3. 推送元素时,增加了TOP并将新元素放置在所指向的位置TOP

  4. 弹出元素时,返回由指向的元素TOP并降低其值。

  5. 推入之前,检查堆栈是否已满

  6. 弹出之前,检查堆栈是否已为空

05b6364b92be87981079fa53be901d5a.png
堆栈数据结构的工作

Python,C和C ++中的堆栈实现

最常见的堆栈实现是使用数组,但是也可以使用列表来实现。

C:

// Stack implementation in C

#include 
#include 
#include "math.h"

/*堆栈最大存储元素基数*/
#define MAX 10

int count = 0;

// Creating a stack
struct stack
{
    int items[MAX];//堆栈元素数组
    int top;
};
typedef struct stack st;

void createEmptyStack(st *s){
    s->top = -1;
}

// Check if the stack is full
int isfull(st *s){
    if (s->top == MAX - 1)
        return 1;
    else
        return 0;
}

// Check if the stack is empty
int isempty(st *s){
    if (s->top == -1)
        return 1;
    else
        return 0;
}

// Add elements into stack
void push(st *s, int newitem){
    if (isfull(s))
    {
        printf("STACK FULL");
    }
    else
    {
        s->top++;//类似索引递增
        s->items[s->top] = newitem;
    }
    count++;//计算次数=个数=添加几个元素
}

// Remove element from stack
void pop(st *s){
    if (isempty(s))
    {
        printf("\n STACK EMPTY \n");
    }
    else
    {
        printf("Item popped= %d", s->items[s->top]);//--的形式从数组里移除元素
        s->top--;//逐一减去
    }
    count--;
    printf("\n");
}

// Print elements of stack
void printStack(st *s){
    printf("Stack: ");
    for (int i = 0; i < count; i++)
    {
        printf("%d ", s->items[i]);
    }
    printf("\n");
}

// 执行 code
int main(){
    int ch,i;
    st *s = (st *)malloc(sizeof(st));
    /*分配一个sizeof(st)大小的空间,并且把该空间的地址赋给st指针类型的p*/
    createEmptyStack(s);

    #if 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值