您的位置:首页 > 编程语言 > C语言/C++

代码 c++实现动态栈

2015-06-11 09:34 549 查看
[code]//============================================================================
// 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: