(rear-front+m)%m
时间: 2023-12-21 14:02:21 浏览: 48
(rear-front m)%m的意思是将rear-front的结果除以m取余数。其中rear和front是两个数,m是一个除数。
假设rear=7,front=5,m=3。那么(rear-front m)%m=(7-5)%3=2%3=2。
再举一个例子,假设rear=10,front=12,m=5。那么(rear-front m)%m=(10-12)%5=(-2)%5=3。
总而言之,(rear-front m)%m就是两个数相减再取余的结果。无论这两个数的大小怎样,最终得到的余数都会落在0到m-1的范围内。
相关问题
void InitStack(SqStack *&s)//初始化顺序栈 前提:s为未初始化的栈结果将s初始化为空栈 /*构造一个空栈s*/ { s=(SqStack *)malloc(sizeof(SqStack)); s->top=-1; } void InitQueue(SqQueue *&q)//队列初始化 { q=(SqQueue *)malloc (sizeof(SqQueue)); q->front=q->rear=0;位列为空 } void DispQueue(SqQueue *q) /*输出队中元素*/ { int i; i=(q->front+1)%M; printf("%d ",q->CarNo[i]); while ((q->rear-i+M)%M>0) { i=(i+1)%M; printf("%d ",q->CarNo[i]); } printf("\n"); } void DispStack(SqStack *s) { int i; for (i=s->top; i>=0; i--) printf("%d ",s->CarNo[i]); printf("\n"); }
这段代码展示了两个数据结构的初始化函数以及两个数据结构的输出函数。其中,InitStack函数是初始化一个顺序栈,使其成为一个空栈;InitQueue函数是初始化一个顺序队列,使其成为空队列,即队列的队首和队尾都指向0;DispStack函数是打印输出一个顺序栈中的所有元素;DispQueue函数是打印输出一个顺序队列中的所有元素。这些函数都是在顺序栈和顺序队列的基础上进行的。
int StackEmpty(SqStack *s) { return(s->top==-1); } int StackFull(SqStack *s) { return(s->top==N-1); } int Push(SqStack *&s,int e1,int e2)//进栈 { if(s->top==N-1) return 0; s->top++; s->CarNo[s->top]=e1; s->CarTime[s->top]=e2; return 1; } int Pop(SqStack *&s,int &e1,int &e2)//出栈 { if(s->top==-1) return 0; e1=s->CarNo[s->top];//*栈顶元素赋给s* e2=s->CarTime[s->top]; s->top--;//*修改栈顶指针 return 1; } int QueueEmpty(SqQueue *q)//判断队是否为空 { return(q->front==q->rear); } int QueueFull(SqQueue *q) /*判断队满*/ { return((q->rear+1)%M==q->front); } int enQueue(SqQueue *&q,int e) /*进队*/ { if((q->rear+1)%M==q->front) return 0; q->rear=(q->rear+1)%M; q->CarNo[q->rear]=e; return 1; } int deQueue(SqQueue *&q,int &e) /*出队*/ { if(q->front==q->rear) return 0; q->front=(q->front+1)%M; e=q->CarNo[q->front]; return 1; }解释一下每段代码
1. 栈的判空和判满函数:
```
int StackEmpty(SqStack *s) {
return(s->top==-1);
}
int StackFull(SqStack *s) {
return(s->top==N-1);
}
```
这两个函数分别判断栈是否为空和是否已满,其中top表示栈顶位置,N表示栈的最大容量。
2. 栈的进栈和出栈函数:
```
int Push(SqStack *&s,int e1,int e2) {
if(s->top==N-1)
return 0;
s->top++;
s->CarNo[s->top]=e1;
s->CarTime[s->top]=e2;
return 1;
}
int Pop(SqStack *&s,int &e1,int &e2) {
if(s->top==-1)
return 0;
e1=s->CarNo[s->top];
e2=s->CarTime[s->top];
s->top--;
return 1;
}
```
Push函数实现了进栈操作,将车牌号和时间分别存储在CarNo和CarTime数组中,同时修改栈顶指针top。Pop函数实现了出栈操作,将栈顶元素的车牌号和时间赋值给e1和e2,并修改栈顶指针top。
3. 队列的判空和判满函数:
```
int QueueEmpty(SqQueue *q) {
return(q->front==q->rear);
}
int QueueFull(SqQueue *q) {
return((q->rear+1)%M==q->front);
}
```
这两个函数分别判断队列是否为空和是否已满,其中front和rear分别表示队头和队尾位置,M表示队列的最大容量。
4. 队列的进队和出队函数:
```
int enQueue(SqQueue *&q,int e) {
if((q->rear+1)%M==q->front)
return 0;
q->rear=(q->rear+1)%M;
q->CarNo[q->rear]=e;
return 1;
}
int deQueue(SqQueue *&q,int &e) {
if(q->front==q->rear)
return 0;
q->front=(q->front+1)%M;
e=q->CarNo[q->front];
return 1;
}
```
enQueue函数实现了进队操作,将车牌号存储在CarNo数组中,并修改队尾指针rear。deQueue函数实现了出队操作,将队头元素的车牌号赋值给e,并修改队头指针front。