大师兄的数据结构学习笔记(二):堆栈

2020-10-07  本文已影响0人  superkmi

大师兄的数据结构学习笔记(一):线性结构
大师兄的数据结构学习笔记(三):队列

一、什么是堆栈(Stack)

二、堆栈的抽象数据类型描述

操作 含义
Stack CreateStack(int MaxSize) 生成长度为MaxSize的空堆栈
int IsFull(Stack S,int MaxSIze) 判断堆栈S是否已满
void Push(Stack S,ElementType item) 将元素item压入堆栈
int IsEmpty(Stack S) 判断堆栈S是否为空
ElementType Pop(Stack S) 删除并返回栈顶元素

三、栈的顺序存储实现

#ifndef SEQSTACK_H
#define SEQSTACK_H
typedef int DataType;

const int  MaxSize = 100;

class SeqStack
{
public: 
    SeqStack() { top = -1; };       //生成长度为MaxSize的空堆栈
    int IsFull();                   //判断堆栈S是否已满
    void Push(DataType item);       //将元素item压入堆栈
    int IsEmpty();                  //判断堆栈S是否为空
    DataType Pop();                 //删除并返回栈顶元素
private:
    DataType data[MaxSize];         //定义数组
    int top;                        //定义栈顶
};

#endif
#include <iostream>
#include "stack.h"

using namespace std;

void SeqStack::Push(DataType item)
{
    //将元素item压入堆栈
    if (top == MaxSize - 1) {
        printf("Stack is full!");
        return;
    }
    else {
        data[++top] = item;
        return;
    }
}

DataType SeqStack::Pop()
{
    //删除并返回栈顶元素
    if (top == -1){
        printf("Stack is empty");
        return 0;
    }
    else {
        return top--;
    }
};

int SeqStack::IsFull()
{
    //判断堆栈S是否已满
    return (top == MaxSize-1);
}

int SeqStack::IsEmpty()
{
    //判断堆栈S是否为空
    return top == -1;
}

四、堆栈的链式存储实现

#ifndef SEQSTACK_H
#define SEQSTACK_H
typedef int DataType;

typedef struct Node
{
    // 定义数据结构
    DataType data;
    Node* next;
};

class SeqStack
{
public:
    SeqStack() { top->next = nullptr; };                  //构造函数
    void Push(DataType item);       //将元素item压入堆栈
    int IsEmpty();                  //判断堆栈S是否为空
    DataType Pop();                 //删除并返回栈顶元素
private:
    Node* top = new Node;
};

#endif
#include <iostream>
#include "stack.h"

using namespace std;

int SeqStack::IsEmpty()
{
    //判断堆栈S是否为空
    return top->next == nullptr;
}

void SeqStack::Push(DataType item)
{
    //将元素item压入堆栈
    Node* p=new Node;
    p->data=item;
    p->next = top->next;
    top->next = p;
}

DataType SeqStack::Pop()
{
    //删除并返回栈顶元素
    Node* new_top;
    DataType x;
    
    if (IsEmpty()) {
        printf("Stack is empty");
        return 0;
    }
    else {
        new_top = top->next;
        x = new_top->data;
        top->next = new_top->next;
        delete new_top;
        return(x);
    }
};

本文作者:大师兄(superkmi)

上一篇 下一篇

猜你喜欢

热点阅读