队列
是只允许在一端继续插入操作,而在另一端进行删除操作的线性表。
是一种先进先出(FIFO)的线性表。
输入缓存区接收键盘的输入就是按队列的形式输入和输出的
栈一般用顺序表来实现,队列常用链来实现
typedef struct QNode { ElemType data; struct QNode *next ; }QNode , *QueuePrt; typedef struct { QueuePrt front , rear ; //队头,尾指针 }LinkQueue;
创建队列
在内存中创建一个头结点,
讲队列的头指针和尾指针都指向这个生成的头结点
initQueue(LinkQueue *q) { q -> front = q->rear = (QueuePtr)malloc (sizeof(QNode)); if(! q -> front) exit(0); q->front ->next = NULL; }
入队列
InsertQueue(LinkQueue *q, ElemType e) { QueuePtr p ; p = (QueuePtr)malloc (sizeof(QNode)); if(p==NULL) exit(0); p->data =e ; p->next = NULL; p->rear -> next = p; p ->rear = p; }
出队列
将队列中的第一个元素移出,队头指针不发生改变,改变头结点的next指针即可
如果只有一个元素,处理一下队尾指针
DeleteQueue(LinkQueue *q , ElemTypr *e) { QueuePtr p ; if(q->front == q-> rear) return; p = q -> front -> next; *e = p->data; q->front->next = p->next; if(q->rear == q) q->rear =q->front; free(p); }
销毁队列
DestroyQueue(LinkQueue *e) { while(q->front) { q->rear = q -> front ->next; free(q->front); q->front = q->rear; } }