首页 > 其他 > 详细

1顺序栈

时间:2021-09-05 18:45:45      阅读:13      评论:0      收藏:0      [点我收藏+]
//#include <stdio.h>             // c 库
#include <stdlib.h>                //maclloc 库
#include <iostream>                // c++ 库

// 有本句 ,下面cout 前面可以没有  std::
using namespace std;

#define MAXSIZE 4
typedef char   Elem;


//顺序栈 算法思想是使用两个指针分别指向栈底和栈顶
// 初始和判空  top=base    , 判满  top - base = maxsize    
//push 时 栈不满就 存入数据并top指针++ ,pop时相反

typedef struct {
    Elem data[MAXSIZE];
    Elem* Top, * Base;
} Stack;

void InitStack(Stack& s) {
    s.Base = s.Top = s.data;
}

//判空
bool StackEmpty(Stack s) {
    if (s.Top == s.Base)
        return 1;
    else
        return 0;
}

//判满
bool StackFull(Stack s)
{
    if (s.Top - s.Base == MAXSIZE)
    {
        // cout << " S is Full !!" << endl;
        return 1;
    }
    else
        return 0;
}

bool Push(Stack& s, char e)
{

    if (StackFull(s))
    {
        cout << " 数据 " << e << " is LOST !" << endl;
        return 0;
    }

    else {
        *s.Top = e;
        (s.Top)++;  //top 指针上移
    }
}
bool Pop(Stack& s, Elem& x) {
    if (StackEmpty(s))
    {
        cout << " S is Empty !!" << endl;
        return 0;
    }
    else {
        x = *(s.Top - 1);
        (s.Top)--; //top 指针下移
        return 1;
    }
}

//Destroy(Stack &S);

int main() {

    Stack S;
    //初始化
    InitStack(S);

    //Push 测试
    Push(S, a);
    Push(S, b);
    Push(S, c);
    Push(S, d);
    Push(S, e);

    //POP 测试
    Elem t;
    Pop(S, t);
    cout << "pop " << t << endl;
    Pop(S, t);
    cout << "pop " << t << endl;

    ////查看Stack内数据
    //cout << endl << " Stack 内数据是";
    //for (int i = 0; i < MAXSIZE; i++)
    //    cout << S.data[i] << " ";
    //cout << endl;

}

 

1顺序栈

原文:https://www.cnblogs.com/abel2020/p/15225624.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!