链式栈C++实现

来源:互联网 发布:深圳国税开票软件 编辑:程序博客网 时间:2024/06/14 09:50


   

<span style="font-size:18px;">#include <iostream>#include<stdio.h>#include<malloc.h>#include<stdlib.h>using namespace std;typedef struct Node{   int data;   struct Node *pNext;}NODE,*PNODE;typedef struct Stack{   PNODE pTop;   PNODE pBottom;}STACK,*PSTACK;//函数声明void initStack(PSTACK);void push(PSTACK,int);void traverse(PSTACK);bool pop(PSTACK,int *);void clearStack(PSTACK);bool empt(PSTACK);int main(){    STACK s;//STACK等价于struct Stack    initStack(&s);    push(&s,1);    push(&s,2);    push(&s,3);    push(&s,4);    push(&s,5);    push(&s,6);    int val;     traverse(&s);    //出栈    bool b = pop(&s,&val);    if(b){         //遍历输出    printf("出栈成功,出栈元素=");    printf("%d\n",val);    traverse(&s);    }else{      printf("出栈失败\n");    }    clearStack(&s);    printf("清空栈\n");    traverse(&s);    printf("进栈\n");    push(&s,1);    push(&s,2);    push(&s,3);    traverse(&s);    return 0;}//将栈清空void clearStack(PSTACK pStack){    if(empt(pStack)){      return ;    }else{     while(pStack->pBottom!=pStack->pTop){        PNODE p = pStack->pTop;        pStack->pTop =p->pNext;        free(p);        p=NULL;    }    }}//用来判断栈是否为空bool empt(PSTACK pStack){    if(pStack->pTop==pStack->pBottom){        return true;    }else{        return false;    }}//用来弹栈,这个val将出栈的元素保存bool pop(PSTACK pStack,int * val){     if(empt(pStack)){        return false;     }else{        PNODE p = pStack->pTop;        pStack->pTop=p->pNext;        *val =p->data;        free(p);        p=NULL;        return true;     }}//用来遍历栈void traverse(PSTACK pStack){    PNODE p = pStack->pTop;    while(p!=pStack->pBottom){        printf("%d\n",p->data);        p=p->pNext;    }}//用来压栈void push(PSTACK pStack,int value){    PNODE p = (PNODE)malloc(sizeof(NODE));    if(NULL==p){        printf("压栈失败\n");        exit(-1);    }else{      p->data=value;      p->pNext=pStack->pTop;//pStack->pTop不能随便改成pStack->pBottom      pStack->pTop=p;    }}//用来初始化栈void initStack(PSTACK pStack){    PNODE p = (PNODE)malloc(sizeof(NODE));    if(NULL==p){        printf("动态内存分配失败\n");        exit(-1);    }else{        pStack->pBottom=p;        pStack->pTop=p;        pStack->pTop->pNext=NULL;    }}</span>

1 0