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;
    }
    
  • 相关阅读:
    链表操作 —— 61_链表旋转
    链表操作 —— 25_k个一组翻转链表
    链表操作 —— 19_删除链表倒数第N个结点
    链表操作 —— 1. 2_两数相加
    Hash相关 —— 2. 387_字符串中的第一个唯一字符
    Hash相关 —— 1. 1_两数之和
    Maven02-Maven 仓库、生命周期、插件、镜像
    mvn test 运行测试不显示测试统计信息和测试结果
    Maven 概述
    Spring源码03---parseDefaultElement
  • 原文地址:https://www.cnblogs.com/mrcharles/p/11879914.html
Copyright © 2011-2022 走看看