zoukankan      html  css  js  c++  java
  • 13 一个完整的链栈代码

    项目结构:

    main.cpp:

    #include <iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include "function_for_LinkStack.h"
    
    using namespace std;
    
    int main()
    {
        TestLinkStack();
    
        return 0;
    }
    View Code

    function_for_LinkStack.h:

    #ifndef FUNCTION_FOR_LINKSTACK_H_INCLUDED
    #define FUNCTION_FOR_LINKSTACK_H_INCLUDED
    
    /*
        链栈是运算受限的单链表,只能在链表头部进行操作
        链表的头指针就是栈顶
        不需要头节点
        基本不存在栈满的情况
        空栈 相当于 头指针指向空
        插入和删除仅在栈顶出执行
        节点之间的链接方向:(头节点)栈顶->栈底
    */
    
    typedef char ElemType;
    
    typedef struct StackNode{
        ElemType data;      //数据域
        struct StackNode *next;     //指针域
    }StackNode, *LinkStack;
    
    //初始化链栈
    void InitStack(LinkStack &S);
    
    //判空
    int StackEmpty(LinkStack S);
    
    //入栈
    void Push(LinkStack &S, ElemType e);
    
    //出栈
    void Pop(LinkStack &S);
    
    //出栈并获取栈顶元素
    ElemType Pop_with_elem(LinkStack &S);
    
    //获取栈顶元素
    ElemType GetTop(LinkStack &S);
    
    //打印栈中元素(自顶向下)
    void PrintStack(LinkStack S);
    
    //测试
    void TestLinkStack();
    
    #endif // FUNCTION_FOR_LINKSTACK_H_INCLUDED
    View Code

    function_for_LinkStack.cpp:

    #include<stdio.h>
    #include<stdlib.h>
    #include "function_for_LinkStack.h"
    
    //初始化链栈
    void InitStack(LinkStack &S){
        //构造一个空栈,栈顶指针置空
        S=NULL;
    }
    
    //判空
    int StackEmpty(LinkStack S){
        if(S == NULL){
            return 1;
        }else{
            return 0;
        }
    }
    
    //入栈
    void Push(LinkStack &S, ElemType e){
        LinkStack p = (LinkStack)malloc(sizeof(StackNode));     //生成新节点
        p->data = e;        //数据域置为e
        p->next = S;        //将新节点插入栈顶
        S=p;        //修改栈顶指针
    }
    
    //出栈
    void Pop(LinkStack &S){
        //先判断栈是否为空
        if(S == NULL){
            exit(0);
        }
        LinkStack p = S;        //声明新节点指向栈顶
        S = S->next;
        free(p);        //释放临时节点
    }
    
    //出栈并获取栈顶元素
    ElemType Pop_with_elem(LinkStack &S){
        ElemType e;     //存放栈顶元素的数据域
        //先判断栈是否为空
        if(S != NULL){
            exit(0);
        }
        LinkStack p = S;        //声明新节点指向栈顶
        S = S->next;
        e = p->data;
        free(p);        //释放临时节点
        return e;       //返回数据域类型
    }
    
    //获取栈顶元素
    ElemType GetTop(LinkStack &S){
        if(S != NULL){
            return S->data;
        }
    }
    
    //打印栈中元素(自顶向下)
    void PrintStack(LinkStack S){
        LinkStack p = S;        //声明指向栈顶的指针
        while(p != NULL){
            printf("%c ", p->data);     //依次输出每个节点的数据域
            p = p->next;
        }
    }
    
    //测试
    void TestLinkStack(){
        LinkStack S;        //声明栈顶节点
        printf("初始化:
    ");
        InitStack(S);
    
        //入栈
        printf("压入元素:
    ");
        Push(S, 'a');
        Push(S, 'b');
        Push(S, 'c');
        Push(S, 'd');
        Push(S, 'e');
    
        printf("
    获取栈顶元素:%c
    ", GetTop(S));
        printf("
    栈是否为空?%d
    ", StackEmpty(S));
        printf("
    打印栈:
    ");
        PrintStack(S);
    
        printf("
    出栈:
    ");
        Pop(S);
    
        printf("
    获取栈顶元素:%c
    ", GetTop(S));
        printf("
    栈是否为空?%d
    ", StackEmpty(S));
        printf("
    打印栈:
    ");
        PrintStack(S);
    
        printf("
    再压入新元素:
    ");
        Push(S, 'f');
    
        printf("
    栈是否为空?%d
    ", StackEmpty(S));
        printf("
    打印栈:
    ");
        PrintStack(S);
    
        printf("
    获取栈顶元素:%c
    ", GetTop(S));
    }
    View Code

    运行结果:

  • 相关阅读:
    Git SSH Key 生成步骤
    Mac终端(Terminal)自定义颜色,字体,背景
    MAC进入文件夹快捷键
    在Terminal中,如何打开Finder,并显示当前的目录
    mac文件夹怎么重命名?苹果电脑文件夹重命名快捷键
    如何在Mac OS X中开启或关闭显示隐藏文件命令
    怎样将二个路由进行桥接的方法
    关于apache access log 统计的那些事儿
    aaaa
    CodeForces463C Gargari and Bishops(贪心)
  • 原文地址:https://www.cnblogs.com/CPU-Easy/p/11722036.html
Copyright © 2011-2022 走看看