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

    运行结果:

  • 相关阅读:
    如何完全备份android在系统system分区和data分
    U3D游戏开发商思考
    安德鲁斯Toast它们的定义和防止重复显示器
    android反射组件 (一个)java 它们的定义annotation基础知识
    ZOJ 3794 Greedy Driver spfa
    [LeetCode OJ] Copy List with Random Pointer 扩大
    LAN公布java web项目的方法的外侧
    [RxJS] Creation operator: create()
    [RxJS] Creation operators: interval and timer
    [Unit Testing] Angular Test component with required
  • 原文地址:https://www.cnblogs.com/CPU-Easy/p/11722036.html
Copyright © 2011-2022 走看看