zoukankan      html  css  js  c++  java
  • 栈的实现

    typedef struct node * PNode;

    /*定义栈节点类型*/

    typedef struct node

    {

        int  data;//数据

        PNode down;

    }Node;

     

    typedef struct stack

    {

        PNode top;

        int size;

    }Stack;

     

    //创建一个栈

    Stack  *createStack()

    {

        Stack *ps = (Stack *)malloc(sizeof(Stack));

        if(ps!=NULL)

        {

            ps->top = NULL;

            ps->size = 0;

        }

        return ps;

    }

     

    //销毁栈

    void DestoryStack(Stack *stack)

    {

        if (stack!=NULL) {

            free(stack);

            stack = NULL;

        }

    }

     

    //是否是空栈

    int IsEmptyStack(Stack *pStack)

    {

        if (pStack->top == NULL && pStack->size == 0) {

            return 1;

        }

        return 0;

    }

     

    //获取栈尺寸

    int GetStackSize(Stack *pStack)

    {

        if (pStack!=NULL) {

            return  pStack->size;

        }

        return 0;

    }

     

    //入栈

    PNode PushStack(Stack *pStack,int data)

    {

        PNode pNode = (PNode)malloc(sizeof(Node));

        

        if (pNode!=NULL) {

            

            pNode->data = data;

            pNode->down = pStack->top;

            

            pStack->size++;

            pStack->top = pNode;

        }

        return pNode;

        

    }

     

    //获取栈顶

    PNode GetTopStack(Stack *stack,int *data)

    {

        if (IsEmptyStack(stack)!=1 && data !=NULL) {

            

            *data =stack->top->data;

        }

        return stack->top;

    }

     

    //出栈

    PNode pop(Stack *pStack,int *data)

    {

        PNode pNode = pStack->top;

        if (IsEmptyStack(pStack)!=1 && pNode!=NULL) {

            

            if(data!=NULL)

            {

                *data = pNode->data;

            }

            pStack->size --;

            pStack->top = pStack->top->down;

            free(pNode);pNode= NULL;

        }

        return pStack->top;

    }

     

    //遍历访问栈

    void StackTraverse(Stack *ps,void (*visit)())

    {

        PNode pNode = ps->top;

     

        while (pNode->down) {

     

            visit(pNode->data);

            pNode =  pNode->down;

     

        }

     

    }

     

    /*把栈置空*/

    void ClearStack(Stack *ps)

    {

        while(IsEmptyStack(ps)!=1)

        {

            pop(ps,NULL);

        }

    }

     

    /*销毁一个栈*/

    void DestroyStack(Stack *ps)

    {

        if(IsEmptyStack(ps)!=1)

            ClearStack(ps);

        free(ps);

    }

     

     

    void print(int i)

    {

        printf("该节点元素为%d ",i);

    }

     //调用如下

    int main(int argc, const char * argv[]) {

        @autoreleasepool {

            int i,data;

            Stack *ps = createStack();

            printf("0-9依次入栈并输出如下: ");

            for(i=0;i<10;i++)

            {

                PushStack(ps,i);

                GetTopStack(ps,&data);

                printf("%d ",data);

            }

            printf(" 从栈顶到栈顶遍历并对每个元素执行print函数: ");

            StackTraverse(ps,print);

        }

        return 0;

    }

     

    LOG:

    0-9依次入栈并输出如下:

    0 1 2 3 4 5 6 7 8 9 

    从栈顶到栈顶遍历并对每个元素执行print函数:

  • 相关阅读:
    实践javascript美术馆的小案例,学习到的东西还是蛮多的,包括javascript编程中的预留退路、分离javascript、以及实现向后兼容等
    HTML5的渐变色 渐变的两种类型 createLinearGradient 和createRadialGradient
    (转)tar 解压缩命令
    VM下的linux系统上不了网?? 使用putty远程登录不上linux的解决方法?
    Js全等和等于
    JavaScript踩坑
    div height 自适应高度 占满剩余高度的方法
    iframe边距问题解决
    Vue.Js初学踩坑
    Linq.js表达式常见写法
  • 原文地址:https://www.cnblogs.com/menchao/p/4846269.html
Copyright © 2011-2022 走看看