• 数据结构之栈的一些基本操作


    #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 pButtom;
    }STACK,*PSTACK;

    void init(PSTACK); //PSTACK 等价于struct Stack*
    void push(PSTACK,int);
    void traverse(PSTACK);
    bool pop(PSTACK,int*);
    bool empty(PSTACK);
    void clear(PSTACK); //清空栈
    int main(void)
    {
        STACK S;//STACK 等价于 struct Stack
        int val;
        init(&S);  //造出一个空栈
        push(&S,1);  //压栈
        push(&S,2);
        push(&S,3);
        push(&S,4);
        push(&S,5);
        push(&S,6);
        push(&S,8);
        traverse(&S);
        if(pop(&S,&val))
        {
            printf("出栈成功!,出栈的元素是:%d ",val);
            printf("出栈后的元素为:");
            traverse(&S); //遍历输出
        }
        else
        {
            printf("出栈失败! ");
        }
       
        clear(&S);
        printf("清空栈后.");
        traverse(&S);
        return 0;
    }
    void init(PSTACK pS)
    {
        pS->pTop = (PNODE)malloc(sizeof(NODE));
        if(NULL == pS->pTop)
        {
            printf("动态内存分配失败! ");
            exit(-1);
        }
        else
        {
           pS->pButtom = pS->pTop;
           pS->pTop->pNext = NULL;//等价于pS->Bottom->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->pButtom)
        {
            printf("%d ",p->data);
            p = p->pNext;
        }
        printf(" ");
       
        return ;
    }
    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);
           r = NULL;
          
           return true;
        }
    }
    bool empty(PSTACK pS)
    {
        if(pS->pTop == pS->pButtom)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    void clear(PSTACK pS)
    {
        if(empty(pS))
        {
            return ;
        }
        else
        {
            PNODE p = pS->pTop;
            PNODE q = NULL;
            while(p != pS->pButtom)
            {
                q = p->pNext;
                free(p);
                p = q;
            }
            pS->pTop = pS->pButtom;
           
            /*下面的方法也可以实现clear()
            while(pS->pTop != pS->pButtom)
            {
                PNODE p = pS->pTop;
                pS->pTop = pS->pTop->pNext;
                free(p);
                p = NULL;
            } */
        }
    }
  • 相关阅读:
    find
    fdisk
    falcon-eye
    ethtools
    e2fsck
    dpkg
    declare
    df
    debconf-utils
    区块链从零开始做开发(0):hyperledger Fabric2.3安装
  • 原文地址:https://www.cnblogs.com/baoyingying/p/11666721.html
Copyright © 2020-2023  润新知