队列(Queue)是只允许在一端进行插入,在另一端删除的线性表。
队列的实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| typedef struct { int data[MaxSize]; int front, rear; } SqQueue;
void testQuene(){ SqQuene Q; }
void InitQueue(SqQueue &Q) {
Q.rear=Q.front=0; }
bool QueueEmpty (SqQueue Q){ if(Q.rear==Q.front) return true ; else return false; }
#define MaxSize 10
typedef struct{ ElemType data [MaxSize];
int front, rear;
} SqQueue;
bool EnQueue(SqQueue &Q, ElemType x){ if((Q.rear+1)%MaxSize==Q.front) return false; Q.data [Q.rear]=x;
Q.rear=(Q.rear+1)%MaxSize;
return true ; }
bool DeQueue(SqQueue &Q, ElemType &x){ if(Q.rear==Q.front)
return false; x=Q.data [Q.front]; Q.front=(Q.front+1 )%MaxSize; return true; }
|
队列已满的条件:队尾指针
的再下一个位置是队头,即
(Q.rear+ 1)%MaxSize==Q.front
队空条件:
Q.rear= =Q.front
不浪费最后一个存储区域的做法,设置一个int队列长度,或者设置一个tag,当删除操作的时候tag=1,插入的时候为0,当rear==front&&tag==1时为空。