zoukankan      html  css  js  c++  java
  • 纯C语言实现链栈

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int ElemType;
    
    typedef struct StackNode{
        ElemType data;
        struct StackNode *next;
    }StackNode;
    
    StackNode *InitStack(StackNode *S);//初始化
    StackNode * DestroyStack(StackNode*S);//销毁
    void ClearStack(StackNode*S);//清空
    int StackEmpty(StackNode*S);//判空
    int StackLength(StackNode*S);//栈长度
    ElemType GetTop(StackNode*S);//获取栈顶元素,不修改指针位置
    StackNode *Push(StackNode*S, ElemType e);//插入栈顶
    StackNode *Pop(StackNode *S, ElemType *e);//删除栈顶
    void StackTraverse(StackNode *S);//从栈顶依次遍历
    
    //初始化
    StackNode *InitStack(StackNode *S){
        S = NULL;
        printf("初始化成功
    ");
        return S;
    }
    
    //销毁,返回空指针给S
    StackNode *DestroyStack(StackNode*S){
        StackNode *p = S->next;
        while(p){
            free(S);
            S = p;
            p = p->next;
        }
        printf("销毁成功
    ");
        return NULL;
    }
    
    //清空
    void ClearStack(StackNode*S){
        printf("清空
    ");
        StackNode *p = S;
        while(p!=NULL){
            p->data = 0;
            p = p->next;
        }
        printf("清空成功
    ");
    }
    
    //判空
    int StackEmpty(StackNode*S);
    
    //栈长度
    int StackLength(StackNode*S){
        int len = 0;
        StackNode *p = S;
        while(p!=NULL){
            len++;
            p = p->next;
        }
        return len;
    }
    
    //获取栈顶元素,不修改指针位置
    ElemType GetTop(StackNode*S){
        if(S!=NULL){
            printf("栈顶元素为%d", S->data);
            return S->data;
        }else{
            printf("空链栈无栈顶元素
    ");
            return NULL;
        }
    }
    
    //插入栈顶,返回指针指向当前栈顶
    StackNode *Push(StackNode*S, ElemType e){
        StackNode *p = NULL;
        p = (StackNode *)malloc(sizeof(StackNode));
        p->data = e;
        p->next = S;
        S = p;
        printf("%d入栈成功
    ", e);
        return S;
    }
    
    //删除栈顶,返回指针指向当前栈顶
    StackNode *Pop(StackNode *S, ElemType *e){
        StackNode *p = NULL;//用于暂存删除元素
        if(S == NULL){
            printf("空链栈,删除失败
    ");
            return NULL;
        }
        *e = S->data;
        p = S;
        S = S->next;
        free(p);
        printf("%d出栈成功
    ",*e);
        return S;
    }
    
    //从栈顶依次遍历
    void StackTraverse(StackNode *S){
        StackNode *p = S;
        if(p == NULL){
            printf("空链栈
    ");
            return;
        }
        while(p != NULL){
            printf("%d ", p->data);
            p = p->next;
        }
        printf("
    ");
    }
    
    
    
    int main(void){
        StackNode *S;
        ElemType e;
        //初始化测试
        S = InitStack(S);
    
    //    //获取栈顶元素测试
    //    GetTop(S);
    //    S = Push(S, 999);
    //    GetTop(S);
    
        //入栈测试
        S = Push(S, 1);
        S = Push(S, 3);
        S = Push(S, 2);
        S = Push(S, 4);
        S = Push(S, 7);
    
        //栈长测试
        printf("栈长%d
    ",StackLength(S));
    
        //遍历测试
        StackTraverse(S);
    
    //    //出栈测试
    //    S = Pop(S, &e);
    //    S = Pop(S, &e);
    //    S = Pop(S, &e);
    //    //printf("测试e是否改变: %d
    ",e);
    //    S = Pop(S, &e);
    //    StackTraverse(S);
    
    //    //清空测试
    //    ClearStack(S);
    //    StackTraverse(S);
    
    ////    //销毁测试
    //    S = DestroyStack(S);
    //    StackTraverse(S);
    
        return 0;
    }
    作者:PowerZZJ
    本博客文章大多为原创,转载请请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    手撸机器学习算法
    手撸机器学习算法
    《Python深度学习》 Part 1
    使用Gimp制作Windows应用程序图标
    C# 检查硬盘分区是ssd还是hdd
    微信小程序授权登录以及用户信息相关接口调整导致授权框不弹出
    CNN-LSTM
    MIL基本语法
    Akka Platform Guide 关键点梳理
    阿里云windows服务器激活
  • 原文地址:https://www.cnblogs.com/powerzzjcode/p/10889112.html
Copyright © 2011-2022 走看看