#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;
}
我的疑惑是按理说n是操作个数,为什么它循环的时候,把我的e要存放的数值也当成一次操作个数呢?
在出列那部分cout<<"invalid"<<endl; 再加一句 return ERROR。因为不返回的话就会继续执行下面的语句。
不知道你这个问题是否已经解决, 如果还没有解决的话:不可以准备数组,不申请额外空间。
可以用分圈结构来做,先转外圈,再往里走。因为是旋转一个正方形矩阵,所以找到对应的要换位置的四个点即可,对应关系如下,实现的时候用一个变量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;
}