• 数据结构——顺序栈及其操作


     1 #include<iostream>
     2 using namespace std;
     3 
     4 typedef int SElemType;
     5 typedef int Status;
     6 #define OK 1
     7 #define ERROR 0
     8 
     9 
    10 #define MAXSIZE 100        //栈的最大空间
    11 
    12 
    13 //顺序栈的存储结构
    14 typedef struct SqStack
    15 {
    16     SElemType *base;    //栈底指针
    17     SElemType *top;        //栈顶指针
    18 }SqStack;
    19 
    20 
    21 //初始化,构造一个空栈
    22 Status InitStack(SqStack &S)    //构造一个空栈S
    23 {
    24     S.base = new SElemType[MAXSIZE];
    25 
    26     if (!S.base)        //空间分配失败
    27         return ERROR;
    28 
    29     S.top = S.base;        //空栈
    30     return OK;
    31 }
    32 
    33 
    34 //入栈
    35 //插入元素e为新的栈顶元素
    36 Status Push(SqStack &S, SElemType e)
    37 {
    38     if (S.top - S.base == MAXSIZE)        //栈满
    39         return ERROR;
    40         
    41     *(S.top++) = e;        //先e入栈,然后再栈顶指针+1
    42     //注意这里的优先级,等价于*S.top = e; S.top++;
    43     return OK;
    44 }
    45 
    46 
    47 //出栈
    48 //删除栈顶元素,用e返回其值
    49 Status Pop(SqStack &S, SElemType &e)
    50 {
    51     if (S.top == S.base)        //栈空
    52         return ERROR;
    53 
    54     e = *--S.top;        //栈顶指针减1,将栈顶元素赋值给e
    55     return OK;
    56 }
    57 
    58 
    59 //取栈顶元素
    60 SElemType GetTop(SqStack S)
    61 {
    62     if (S.top != S.base)    //栈非空
    63         return *(S.top - 1);    //返回栈顶元素的值,栈顶指针不变
    64     //注意用S.top - 1 而不是S.top--,因为这样就会改变栈顶指针
    65 }
    66 
    67 
    68 int main()
    69 {
    70     int n, x;
    71     SqStack S;
    72 
    73     InitStack(S);    //初始化顺序栈S
    74 
    75     cout << "请输入顺序栈中的元素个数n:" << endl;
    76     cin >> n;
    77     cout << "请依次输入" << n << "个元素,依次入栈:" << endl;
    78     while (n--)
    79     {
    80         cin >> x;
    81         Push(S, x);
    82     }
    83     cout << "元素依次出栈:" << endl;
    84     while (S.top != S.base)        //栈非空
    85     {
    86         cout << GetTop(S) << " ";
    87         Pop(S, x);
    88     }
    89 
    90     system("pause");
    91     return 0;
    92 }
  • 相关阅读:
    调度算法的评价指标
    进程调度的时机 切换与过程调度方式
    处理机调度 概念和层次
    线程概念 多线程模型
    进程通信
    进程的状态与转换
    进程的定义
    系统调用
    面试题3
    第2章Arduino UNO板结构说明
  • 原文地址:https://www.cnblogs.com/friend-A/p/9072922.html
Copyright © 2020-2023  润新知