算法与数据结构之队列的基本操作(语言c++)


#include
using namespace std;

#define OK 1
#define ERROR 0
typedef int Status;
typedef int QElemType;
typedef struct QNode {
    QElemType data;
    struct QNode *next;
} QNode, *QueuePtr;

typedef struct {
    QueuePtr front; 
    QueuePtr rear; 
} LinkQueue;

Status InitQueue(LinkQueue &Q) 
{
    Q.front = Q.rear = new QNode; 
    Q.front->next = NULL;
    return OK;
}

Status EnQueue(LinkQueue &Q, QElemType e) 
{
    QueuePtr p;
    p = new QNode; 
    p->data = e; 
    p->next = NULL;   
    Q.rear->next=p; 
    Q.rear=p; 
    return OK;
}

Status DeQueue(LinkQueue &Q, QElemType e)
 {
    QueuePtr p;
    if (Q.front == Q.rear)
        cout<<"invalid"; 
    p = Q.front->next; 
    e = p->data; 
    Q.front->next=p->next; 
    cout<if (Q.rear == p)
        Q.rear=Q.front; 
    delete p;
    return OK;
}

int main()
 {
    LinkQueue Q;
    int n,m,e; 
    InitQueue(Q);
    cin >> n;
    while(n--)
    {
        cin >> m;
        switch(m)
        {
            case 1:
                cin>>e;
                EnQueue(Q,e);
                break;
            case 0:
                DeQueue(Q,e);
                break;
        }
    }
    return 0;
}

img

img

img

img

我的疑惑是按理说n是操作个数,为什么它循环的时候,把我的e要存放的数值也当成一次操作个数呢?

在出列那部分cout<<"invalid"<<endl; 再加一句 return ERROR。因为不返回的话就会继续执行下面的语句。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7504005
  • 除此之外, 这篇博客: 常见队列栈链表面试题目及C++实现中的 6 一个正方形N*N,顺时针转90度,如何? 【咦,不是矩阵转置吗】 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    不可以准备数组,不申请额外空间。
    可以用分圈结构来做,先转外圈,再往里走。因为是旋转一个正方形矩阵,所以找到对应的要换位置的四个点即可,对应关系如下,实现的时候用一个变量times替代m,n,q即可。
    在这里插入图片描述

    #include <iostream>
    #include<vector>
    
    using namespace std;
    void rotateEdge(vector<vector<int>> &matrix, int a, int b, int c, int d);
    void rotate(vector<vector<int>> &matrix)
    {
        int tR = 0;
        int tC = 0;
        int dR = matrix.size()- 1;
        int dC = matrix[0].size() - 1;
        while (tR < dR) {
            rotateEdge(matrix, tR++, tC++, dR--, dC--);
        }
    }
    
    void rotateEdge(vector<vector<int>> &matrix, int a, int b, int c, int d)
    {
        int times = d - b;
        int tmp = 0;
        for (int i = 0; i != times; i++) {
            tmp = matrix[a][b + i];
            matrix[a][b + i] = matrix[c - i][b];
            matrix[c - i][b] = matrix[c][d - i];
            matrix[c][d - i] = matrix[a + i][d];
            matrix[a + i][d] = tmp;
        }
    }
    void printMatrix(const vector<vector<int>> arr)
    {
        for(int i=0;i<arr.size();i++)
        {
            for(int j=0;j<arr[0].size();j++)
                cout<<arr[i][j]<<" ";
            cout<<endl;
        }
    }
    int main()
    {
        cout << "Hello world!" << endl;
        vector<vector<int>> arr = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
        printMatrix(arr);
        cout<<"rotate matrix!"<<endl;
        rotate(arr);
        printMatrix(arr);
        return 0;
    }
    
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^