栈的表示和实现

来源:互联网 发布:win10 安装ubuntu 分区 编辑:程序博客网 时间:2024/05/30 07:14
#include<stdio.h>#include<malloc.h>#include<stdlib.h>typedef struct Node{    int data;    struct Node *pNext;}NODE, * PNODE;   //定义指针节点 typedef struct Stack{    PNODE pTop;    PNODE pBottom;}STACK,* PSTACK;   //定义带有栈顶指针和栈低指针的节点 void init(PSTACK pS);void push(PSTACK ,int);bool pop(PSTACK,int *);void traverse(PSTACK);bool empty(PSTACK);void clear(PSTACK);int main(void){    STACK s;    int val;    init (&s); //创建空栈    push(&s,1);    push(&s,2);    push(&s,3);    push(&s,4);    push(&s,5);    traverse(&s);//遍历输出     //clear(&s);  //清空栈     if(pop(&s,&val))    {        printf("出栈成功,出栈的元素是:%3d\n",val);    }    else    printf("出栈失败!\n");    printf("\n栈内剩余的元素有:");     traverse(&s);    return 0;}void init(PSTACK pS){    pS->pTop=(PNODE)malloc(sizeof(NODE));    if(NULL==pS->pTop)    {        printf("动态内存分配失败!\n");        exit(-1);    }    else    {        pS->pBottom=pS->pTop;        pS->pBottom->pNext=NULL;    }}void push(PSTACK pS,int val ){    PNODE pNew=(PNODE)malloc(sizeof(NODE));    pNew->data=val;    pNew->pNext=pS->pTop;    pS->pTop=pNew;    return;}void traverse(PSTACK pS){    PNODE p=pS->pTop;    while(p!=pS->pBottom)    {        printf("%3d ", p->data);        p=p->pNext;    }    return;}bool empty(PSTACK pS){    if(pS->pTop==pS->pBottom)    {        return true;    }    else        return false;}bool pop(PSTACK pS,int *pVal){    if(empty(pS))    {        return false;    }    else    {        PNODE r=pS->pTop;        *pVal=r->data;        pS->pTop=r->pNext;        free(r);        pS=NULL;        return true;    }}void clear(PSTACK pS){    if(empty(pS))    {        return;    }    else    {        PNODE p=pS->pTop;        PNODE q=NULL;        while(p!=pS->pBottom)        {            q=p->pNext;            free(p);            p=q;        }        pS->pTop=pS->pBottom;    }}
1 0