CPP 栈 示例

#include<iostream>
#include<stdlib.h>
using namespace std;

typedef struct node
{
    int data;
    struct node *pNext;
}NODE,*PNODE;

typedef struct stack
{
    PNODE pTop;
    PNODE pBottom;
}STACK,*PSTACK;


bool ininStack(PSTACK);
bool pushStack(PSTACK , int );
int lengthStack(PSTACK);
bool traverseStack(PSTACK);
bool pop(PSTACK);
bool isempty(PSTACK pS);
void claer(PSTACK pS);
int main()
{
    STACK S;
    ininStack(&S);
    pushStack(&S,1);
    pushStack(&S,2);
    pushStack(&S,3);
    pushStack(&S,4);
    lengthStack(&S);
    traverseStack(&S);
    cout<<"长度为:"<<lengthStack(&S)<<endl;
    pop(&S);
    traverseStack(&S);
    cout<<"长度为:"<<lengthStack(&S)<<endl;
    claer(&S);
    return 0;
}

bool ininStack(PSTACK pS)//初始化栈
{
    PNODE pN = (PNODE)malloc(sizeof(NODE));
    if(pN == NULL)
    {
        cout<<"初始化失败!"<<endl;
        exit(-1);
    }
    pS->pTop = pN;
    pS->pBottom = pN;
    pS->pBottom->pNext = NULL;
    return true ;
}

bool pushStack(PSTACK pS, int val)//压栈
{
    PNODE pNew = (PNODE)malloc(sizeof(NODE));
    if(pNew == NULL)
    {
        cout<<"压栈失败!"<<endl;
        exit(-1);
    }
    pNew->data = val;
    pNew->pNext = pS->pTop;
    pS->pTop = pNew;
    return true;
}

bool traverseStack(PSTACK pS)//输出
{
    PNODE p = pS->pTop;
    while(p->pNext!=NULL)
    {
        cout<<p->data<<endl;
        p=p->pNext;
    }
    return true;
}

bool isempty(PSTACK pS)//是否为空
{
    if(pS->pTop == pS->pBottom)
        return true;
    else
        return false;
}

bool pop(PSTACK pS)//出栈
{
    if(isempty(pS))
    {
        cout<<"栈为空!"<<endl;
        return false;
    }
    cout<<"正在出栈..."<<endl;
    PNODE p;
    p = pS->pTop;
    pS->pTop = p->pNext;
    delete(p);
    p=NULL;
    return true;
}

int lengthStack(PSTACK pS)//计算栈长度
{
    int i=0;
    PNODE p=pS->pTop;
    while(p!=pS->pBottom)
    {
        i++;
        p=p->pNext;
    }
    return i;
}

void claer(PSTACK pS)//清栈
{
    if(isempty(pS))
    {
        cout<<"此为空栈!"<<endl;
        exit(0);
    }
    PNODE j;
    while(pS->pTop != pS->pBottom)
    {
        j = pS->pTop;
        pS->pTop = pS->pTop->pNext;
        delete(j);
        j = NULL;
    }
    if(pS->pTop == pS->pBottom)
        cout<<"清栈完成!"<<endl;
    return ;
}

转载于:https://www.cnblogs.com/maskerk/p/7348930.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值