代码 c++实现动态栈

来源:互联网 发布:源码下载 编辑:程序博客网 时间:2024/05/16 07:55
//============================================================================// 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 * pPNODE 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;}
0 0
原创粉丝点击