1顺序栈

//#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;

}

 

上一篇:C----单向链表


下一篇:算法竞赛从入门到进阶