数据结构 链栈

做一个豁达而努力的自己。

链栈的存储结构:

typedef struct StackNode
{
    SElemType data;
    StackNode *next;
}StackNode, *SLinkStack;

链栈的初始化:

void InitStack(SLinkList &S)
{
    S = NULL;
}

判断是否为空:

Status StackEmpty(SLinkList S)
{
    if(S == NULL)
        return true;
    return false;
}

压栈:

Status Push(SLinkList &S, SElemType e)
{
    SLinkList p;
    p = new StackNode;
    if(!p)
        return OVERFLOW;
    cin >> p->data;
    p->next = S;
    S = p;
    return OK;
}

弹栈:

Status Pop(SLinkList &S, SElemType &e)
{
    if(S == NULL)
        return ERROR;
    e = S->data;
    SLinkList p;
    p = S;
    S = S->next;
    delete p;
    return OK;
}

取栈顶元素:

Status GetTop(SLinkList S, SElemType &e)
{
    if(S == NULL)
        return ERROR;
    e = S->data;
    return OK;
}

代码:

#include <iostream>
using namespace std;

//链栈的存储结构
typedef struct StackNode
{
    int data;
    StackNode *next;
}StackNode, *SLinkList;
//链栈的初始化
void InitStack(SLinkList &S)
{
    S = NULL;
}
//判断链表是否为空
bool StackEmpty(SLinkList S)
{
    if(S == NULL)
        return true;
    return false;
}
//压栈
bool Push(SLinkList &S, int e)
{
    SLinkList p;
    p = new StackNode;
    if(!p)
        return false;
    p->data = e;
    p->next = S;
    S = p;
    return true;
}
//弹栈
bool Pop(SLinkList &S, int &e)
{
    SLinkList p;
    if(S == NULL)
        return false;
    e = S->data;
    p = S;
    S = S->next;
    delete p;
    return true;
}
//取栈顶元素
bool GetTop(SLinkList S, int &e)
{
    if(S == NULL)
        return false;
    e = S->data;
    return true;
}
//链栈的销毁
void DestroyStack(SLinkList &S)
{
    SLinkList p, q;
    p = S;
    while(p)
    {
        q = p;
        delete q;
        p = p->next;
    }
    S = NULL;
}
int main()
{
    SLinkList S;
    InitStack(S);
    int n;
    int e;
    cout << "输入元素个数:";
    cin >> n;
    while(n--)
    {
        cin >> e;
        if(Push(S, e))
            ;
        else
            cout << "弹栈失败" << endl;
    }
    if(GetTop(S, e))
        cout << "栈顶元素是:" << e << endl;
    else
        cout << "查找栈顶元素失败" << endl;
    if(Pop(S, e))
        cout << "弹栈成功,弹出的元素是:" << e <<endl;
    else
        cout << "弹栈失败" << endl;
    if(StackEmpty(S))
        cout << "栈为空" << endl;
    else
        cout << "栈不为空" <<endl;
    cout << "销毁链栈" << endl;
    DestroyStack(S);
    if(StackEmpty(S))
        cout << "栈为空" << endl;
    else
        cout << "栈不为空" <<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37043100/article/details/79706288