• 顺序栈的初始化 入栈 出栈以及 打印栈的信息


    使用的开发工具CLion

    CLion 2017.2.1

    Build #CL-172.3544.40, built on August 2, 2017
    Licensed to CLion Evaluator
    Expiration date: September 15, 2017
    JRE: 1.8.0_152-release-915-b6 x86_64
    JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
    Mac OS X 10.12.4

     

      1 #include <iostream>
      2 using namespace std;
      3 
      4 #define  maxSize 1000
      5 #define WWStr(str) #str
      6 #define WWLine "-------------"
      7 
      8 /*
      9  * 目前参考内容
     10  * 严蔚敏版数据结构 数据结构高分笔记
     11  */
     12 
     13 //顺序栈
     14 typedef  struct {
     15     int data[maxSize];
     16     int top;
     17 }SqStack;
     18 
     19 
     20 //栈的初始化
     21 void initSqStack(SqStack &st);
     22 //输出顺序栈的内容
     23 void printSqStack(SqStack st);
     24 //入栈操作
     25 int pushSqStack(SqStack &st,int x);
     26 
     27 //出栈操作
     28 int popSqStack(SqStack &st,int &x);
     29 
     30 int main() {
     31 
     32     std::cout << "Hello, World!" << std::endl;
     33 
     34     SqStack st;
     35 
     36     initSqStack(st);
     37 
     38     printSqStack(st);
     39     pushSqStack(st,1);
     40     pushSqStack(st,2);
     41     pushSqStack(st,3);
     42     printSqStack(st);
     43     
     44     int topElement;
     45 
     46     popSqStack(st,topElement);
     47     popSqStack(st,topElement);
     48     cout<<"刚刚出栈的栈顶元素"<<topElement<<endl;
     49     popSqStack(st,topElement);
     50     printSqStack(st);
     51     popSqStack(st,topElement);
     52     printSqStack(st);
     53 
     54     cout<<WWStr(str)<<WWLine<<WWStr(str)<<WWStr(-------);
     55 
     56 
     57     return 0;
     58 }
     59 
     60 #pragma mark - 顺序栈的初始化操作
     61 void initSqStack(SqStack &st){
     62         st.top = -1;
     63 }
     64 
     65 #pragma mark - 输出顺序栈的内容
     66 void printSqStack(SqStack st){
     67     cout<<"-------输出顺序栈的信息: ----地址:"<<&st<<endl;
     68     for (int i = 0; i <= st.top; ++i) {
     69         cout<<"顺序栈st下标"<<i<<"元素"<<st.data[i]<<endl;
     70     }
     71 
     72 }
     73 
     74 #pragma mark - 入栈操作
     75 int pushSqStack(SqStack &st,int x){
     76     cout<<"-----入栈操作-----"<<"入栈元素"<<x<<endl;
     77     if (st.top == maxSize){
     78         cout<<"栈为满,不能入栈";
     79         return 0;
     80     }
     81     ++st.top;
     82     st.data[st.top] = x;
     83     return 1;
     84 }
     85 
     86 #pragma mark - 出栈操作
     87 int popSqStack(SqStack &st,int &x){
     88     if (st.top == -1) {
     89         cout<<"栈为空,不能出栈"<<endl;
     90         return 0;
     91     }
     92 
     93     -- st.top;
     94     x = st.data[st.top];
     95     cout<<"-----出栈操作----"<<"出栈元素"<<x<<endl;
     96     return  1;
     97 
     98 }
     99 
    100 #pragma mark - 注意事项
    101 void notices(){
    102     /***
    103      * 入栈 出栈要有引用参数指向栈 才能够真的改变栈的值
    104      * 出栈还要有引用参数指向出栈的元素 以记录下来刚刚出栈的元素
    105      */
    106 }

    输出的内容如下:

    Hello, World!
    -------输出顺序栈的信息: ----地址:0x7fff5d6039d0
    -----入栈操作-----入栈元素1
    -----入栈操作-----入栈元素2
    -----入栈操作-----入栈元素3
    -------输出顺序栈的信息: ----地址:0x7fff5d6039d0
    顺序栈st下标0元素1
    顺序栈st下标1元素2
    顺序栈st下标2元素3
    -----出栈操作----出栈元素2
    -----出栈操作----出栈元素1
    刚刚出栈的栈顶元素1
    -----出栈操作----出栈元素0
    -------输出顺序栈的信息: ----地址:0x7fff5d6039d0
    栈为空,不能出栈
    -------输出顺序栈的信息: ----地址:0x7fff5d6039d0
    str-------------str-------



    如有问题,敬请指正

    我会不定期分享 iOS 相关技术文章
  • 相关阅读:
    Vue.Js(html5) + Java实现文件分片上传
    进程、线程基础知识全家桶,30 张图一套带走
    20 张图揭开「内存管理」的迷雾,瞬间豁然开朗
    面试官:换人!他连 TCP 这几个参数都不懂
    TCP 半连接队列和全连接队列满了会发生什么?又该如何应对?
    实战!我用 Wireshark 让你“看得见“ TCP
    IP 基础知识全家桶,45 张图一套带走
    写了Bug,误执行 rm -fr /*,我删删删删库了,要跑路吗?
    你还在为 TCP 重传、滑动窗口、流量控制、拥塞控制发愁吗?看完图解就不愁了
    硬不硬你说了算!35 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
  • 原文地址:https://www.cnblogs.com/ITCoderW/p/7374895.html
Copyright © 2020-2023  润新知