队列的基本操作 数据结构
队列(queue)也是线性表的一种特殊情况,其所有的插入均限定在表的一端进行,而所有的删除则限定在表的另一端进行。允许插入的一端称队尾(rear),允许删除的一端称队头(front)。队列的结构特点是先进队的元素先出队,因此,通常又把队列叫做先进先出表.
队列的基本操作:
(1) InitQueue(&Q): 初始化操作,设定一个空队列。
(2) QueueEmpty(Q): 判空操作,若Q为队列,则返回值“true”,否则返回值“false”。
(3) EnQueue(&Q, e): 入队操作,在队列Q的队尾插入一个元素e。
(4) DeQueue(&Q, &e): 出队操作,若队列Q不空,在队头删除一个元素。
(5) GetHead(Q, &e): 取队头元素操作,若队列Q不空则取队头元素的值。
(6) ClearQueue(&Q): 置队空操作,不论队列是否为空,操作结果都是将Q置为空队列。
(7) QueueLength(Q): 求当前队列中元素的个数。
(8) DestroyQueue(&Q): 销毁Q队列。
(1)初始化操作
void InitQueue(SqQueue &Q){
//构造一个空队列
Q.base = (QElemType *)malloc(MAXSIZE * sizeof(QElemType));
if ( ! Q.base) exit(0);
Q.front = Q.rear = 0;
}//InitQueue
(2)求队列的长度
int QueueLength(SqQueue Q){
//求队列的长度
return (Q.rear – Q.front + MAXQSIZE) % MAXQSIZE;
}
( 3 )入队列操作
void EnQueue(SqQueue &Q, QElemType e){
//插入元素e为Q的新的队尾元素
if ((Q.rear+1)%MAXQSIZE == Q.front)
exit(0);
Q.base[Q.rear] = e;
Q.rear = (Q.rear+1) % MAXQSIZE;
}
( 4 )判空操作
int QueueEmpty(SqQueue Q){
//判断队列是否是空队列
if (Q.rear == Q.front ) return 1;}
(5)出队列操作
void DeQueue(SqQueue &Q, QElemType &e){
// 删除Q的队头元素, 并用e返回其值
if(Q.front == Q.rear) return 0;
e = Q.base[Q.front];
Q.front = (Q.front+1) % MAXQSIZE;
}
(6)取队头元素
void GetHead(SqQueue Q, QElemType &e){
// 取Q的队头元素, 并用e返回其值
if(Q.front == Q.rear) return 0;
e = Q.base[Q.front];
}
还没有评论,来说两句吧...