目录
链式队列
typedef int data_t;
typedef struct node_t {
data_t data ;
struct node_t *next;
} linknode_t, *linklist_t;
typedef struct {
linklist_t front, rear;
} linkqueue_t;
插入操作在队尾进行,删除操作在队头进行,由队头指针和队尾指针控制队列的操作。
创建空队列 :
linkqueue_t *CreateQueue() {
linkqueue_t *lq = (linkqueue_t *)malloc(sizeof(linkqueue_t));
lq->front = lq->rear = (linklist_t)malloc(sizeof(linknode_t));
lq->front->next = NULL ; /*置空队*/
return lq; /*返回队列指针*/
}
判断队列空 :
int EmptyQueue(linkqueue_t *lq) {
return ( lq->front = = lq->rear) ;
}
入队 : void EnQueue (linkqueue_t *lq, data_t x)
{
lq->rear->next = (linklist_t)malloc(sizeof(linknode_t)) ;
lq->rear = lq->rear->next; /*修改队尾指针*/
lq->rear->data = x ; /*新数据存入新节点*/
lq->rear->next = NULL ; /*新节点为队尾*/
return;
}
出队
data_t DeQueue(linkqueue_t *lq) {
data_t x;
linklist_t p; /*定义一个指向队头结点的辅助指针*/
p = lq->front->next ; /*将它指向队头结点*/
lq->front->next = p->next ; /*删除原先队头结点
x = p->data; free(p) ; /*释放原队头结点*/
if (lq->front->next == NULL) lq->rear = lq->front;
return x; }