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;
    }
    
  • 相关阅读:
    数据库连接JOIN
    Java面试金典
    Collections.sort详解
    Java复合优先于继承
    js算术运算符与数据类型转换
    js数组类型
    js对象类型
    CSS-API(CSS编程接口),CSSOM(css对象模型)
    从零开始--单片机十字路口交通灯控制实验
    matlab用双重循环实现费诺编码
  • 原文地址:https://www.cnblogs.com/mrcharles/p/11879914.html
Copyright © 2011-2022 走看看