zoukankan      html  css  js  c++  java
  • 代码 c++实现动态栈

    //============================================================================
    // Name        : 栈.cpp
    // Author      : xingbo
    // Version     :
    // Copyright   : Your copyright notice
    // Description : Hello World in C++, Ansi-style
    //============================================================================
    
    #include <iostream>
    #include <malloc.h>
    #include <stdlib.h>
    using namespace std;
    typedef struct Node{
        int data;
        Node * pNext;
    }NODE,*PNODE;
    typedef struct Stack{
        PNODE pTop;
        PNODE pBottom;
    }STACK,* PSTACK;
    //以上两个,分别是节点,栈的定义
    /*
     * pBottom永远指向最下面的一个ptop移动插入或者删除数据,判断栈为空,利用pbottom=ptop,判断是否满,不存在,满不满的问题
     */
    void init(PSTACK p){//传一个地址,等价于stack * p
    PNODE tmp=(PNODE)malloc(sizeof(NODE));//需要给他制定一个top和bottom并且指向同一个地址
    if (tmp==NULL){
        cout<<"错误"<<endl;
        exit(-1);
    }
    p->pBottom=tmp;
    p->pTop=tmp;
    p->pTop->pNext=NULL;//这一句很难想出来
    
    }
    bool push(PSTACK p,int data){
    /*
     * 1.创造新的节点
     * 2.新的节点指向之前的top
     * 3.然后将ptop指向这个新的节点,
     *
     */
        PNODE pnode = (PNODE)malloc(sizeof(NODE));
        pnode->data=data;
        pnode->pNext=p->pTop;
        p->pTop=pnode;
        return true;}
    void traverse(PSTACK p){
        PNODE t=p->pTop;
    while (t!=p->pBottom){
    cout<<t->data<<",";
    t=t->pNext;
    
    }
    return;
    }
    bool isempty(PSTACK p){
        if(p->pTop==p->pBottom){
            return true;
        }else return false;
    }
    int pop(PSTACK p){
        PNODE tmp;
        int i;
        if (!isempty(p)){
            tmp=p->pTop;
            i=tmp->data;
            p->pTop=p->pTop->pNext;// top下移一个
            free(tmp);
    
        }else{
            exit(-1);
        }
        return i;
    
    }
    int main() {
        STACK S;//生声明一个空间,有两个元素,但是并没有存放有效数据,但是含有:ptop pbottom
        init(&S);
        push(&S,1);
        push(&S,2);
        push(&S,3);
        push(&S,4);
        traverse(&S);
        cout<<pop(&S);
        cout<<pop(&S);
        cout<<"删除之后"<<endl;
        traverse(&S);
    
        return 0;
    }
    
  • 相关阅读:
    域名和IP地址的关系通俗解释
    简单卷、跨区卷、带区卷、镜像卷和 RAID5的区别
    什么是网络端口
    Windows7 64 bit 下解决:检索 COM 类工厂中 CLSID 为 {0002450000000000C000000000000046} 的组件时失败
    SQL函数,收藏先。
    C#中抽象类和接口的区别(转)
    SQL数据库碎片检查DBCC SHOWCONTIG含义
    SQL锁表语句
    50种方法优化SQL Server
    简单工厂模式(转)
  • 原文地址:https://www.cnblogs.com/mrcharles/p/11879914.html
Copyright © 2011-2022 走看看