• 数组实现的栈和队列


    基本的操作需要:入栈,出栈,返回栈顶元素,是否为空栈。

     1 #include<iostream>
     2 using namespace std;
     3 
     4 class MyStack
     5 {
     6 private:
     7     char* stack;     // 栈空间的指针
     8     int arrayLength;         // 栈容量
     9     int stackTop;          // 栈顶
    10 
    11 public:
    12     MyStack(int size);
    13     ~MyStack();
    14     bool stackEmpty();    //判断栈是否为空
    15     bool stackFull();     //判断栈是否满
    16     void clear();    // 清空栈
    17     int stackLength();    // 已有元素的个数
    18     void push(char elem); // 将元素入栈 
    19     void pop(); // 清除栈头
    20     char top();
    21     void stackTraverse(); // 栈遍历
    22 };
    23 
    24 MyStack::MyStack(int size)
    25 {
    26     arrayLength = size;
    27     stack = new char[size];
    28     stackTop = 0;
    29 }
    30 
    31 
    32 MyStack::~MyStack()
    33 {
    34     delete[] stack;
    35 }
    36 
    37 bool MyStack::stackEmpty()
    38 {
    39     if (stackTop == 0)
    40         return true;
    41     else
    42         return false;
    43 }
    44 
    45 bool MyStack::stackFull()
    46 {
    47     if (stackTop >= arrayLength)
    48         return true;
    49     else
    50         return false;
    51 }
    52 
    53 void MyStack::clear()
    54 {
    55     stackTop = 0;
    56 }
    57 
    58 int MyStack::stackLength()
    59 {
    60     return stackTop;
    61 }
    62 
    63 void MyStack::push(char elem)//压栈
    64 {
    65     if (stackFull())
    66     {
    67         return;//可以改成扩容
    68     }
    69     stack[stackTop] = elem;
    70     stackTop++;
    71 }
    72 
    73 void MyStack::pop()//清除栈头
    74 {
    75     if (stackEmpty())
    76         return;
    77     stackTop--;
    78 }
    79 
    80 char MyStack::top() {//返回头上的那个元素,但是不删除
    81     if (stackEmpty()) {
    82         cout << "栈空" << endl;
    83         return false;
    84     }
    85     return stack[stackTop];
    86 }
    87 void MyStack::stackTraverse()
    88 {
    89     for (int i = stackTop - 1; i >= 0; i--)
    90     {
    91         cout << stack[i] << ",";
    92     }
    93     cout << endl;
    94 
    95 }

    数组队列:

     1 #include<iostream>
     2 using namespace std;
     3 #define MAXSIZE 10
     4 class queue
     5 {
     6 public:
     7         queue();
     8         bool IsFull();
     9         bool IsEmpty();
    10         bool EnQueue(int);
    11         bool DeQueue(int&);
    12 private:
    13         int buf[MAXSIZE];
    14         int rear;
    15         int front;
    16 };
    17 queue::queue()
    18 {
    19         this->rear=0;
    20         this->front=0;
    21 }
    22 bool queue::IsEmpty()
    23 {
    24         if(this->rear==this->front)
    25                 return true;
    26         else
    27                 return false;
    28 }
    29 bool queue::IsFull()
    30 {
    31         if((this->rear+1)%MAXSIZE==this->front)
    32                 return true;
    33         else
    34                 return false;
    35 }
    36 bool queue::EnQueue(int data)
    37 {
    38         if(IsFull())
    39                 return false;
    40         this->buf[this->rear]=data;
    41         this->rear=(this->rear+1)%MAXSIZE;
    42         return true;
    43 }
    44 bool queue::DeQueue(int& data)
    45 {
    46         if(IsEmpty())
    47                 return false;
    48         data=this->buf[this->front];
    49         this->front=(this->front+1)%MAXSIZE;
    50 }

    //队列用数组来实现有点不舒服

  • 相关阅读:
    006_tcpdump专题
    002_阿里监控平台的“打怪升级”之路
    001_谈阿里核心业务监控平台SunFire的技术架构
    001_前端面试集合
    007_zkCli.sh
    007_Chrome的Waterfall详解
    021_supervise进行管理利器
    028_shell脚本递归求值
    MySQL -- 在磁盘爆满后复制的状态
    MySQL -- 内存使用监控详解
  • 原文地址:https://www.cnblogs.com/yoriko/p/12292998.html
Copyright © 2020-2023  润新知