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函数:

  • 相关阅读:
    TCP 的那些事儿(转载)
    3. 对象在内存中的布局
    GO语言学习之数据类型-->基本类型(字符串)
    GO语言学习之变量and常量
    wrk
    为什么显示消息“错误:您所在国家/地区是禁运国,无法下载 Java”?
    raw.githubusercontent.com 访问不了
    Windows Terminal
    vue:无法加载文件C:UsersAppDataRoaming pmvue.ps1, 在此系统上无法加载脚本
    vue使用过滤改变el-switch开关的状态
  • 原文地址:https://www.cnblogs.com/menchao/p/4846269.html
Copyright © 2011-2022 走看看