队列(链式)

队列的链式优点是不用考虑队满情况。代码如下:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

//定义链式队列结点 
typedef struct LinkNode{
    int data;
    struct LinkNode *next;
}LinkNode;

//定义队头尾指针结点(或者叫队列) 
typedef struct {
    LinkNode *rear,*front;
}LinkQueue;

//初始化队列(带头结点) 
void InitQueue(LinkQueue &Q){
    Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));//队头和队尾指针都指向头结点
    Q.front->next = NULL; 
}

//初始化队列(不带头结点) 
void InitQueue(LinkQueue &Q){
    Q.front=NULL;//队头和队尾指针都指向NULL
    Q.rear=NULL;
}

//判断队列是否为空(带头结点) 
bool isEmpty(LinkQueue Q){
    if(Q.front==Q.rear){
        return true;
    }else{
        return false;
    }
} 

//判断队列是否为空(不带头结点) 
bool isEmpty(LinkQueue Q){
    if(Q.front==NULL){
        return true;
    }else{
        return false;
    }
} 

//入队(带头结点) 
void EnQueue(LinkQueue &Q,int x){
    LinkNode *s = (LinkNode*)malloc(sizeof(LinkNode));
    s->data = x;
    s->next = NULL;
    Q.rear->next = s;//s插入到rear之后 
    Q.rear = s;//修改表尾指针 
}

//入队(不带头结点) 
void EnQueue(LinkQueue &Q,int x){
    LinkNode *s = (LinkNode*)malloc(sizeof(LinkNode));
    s->data = x;
    s->next = NULL;
    if(Q.front==NULL){//队头尾指针指向第一个元素 
        Q.front = s;
        Q.rear = s;
    }else{
        Q.rear->next = s;//s插入到rear之后 
        Q.rear = s;//修改表尾指针 
    }   
}

//出队(带头结点)
bool DeQueue(LinkQueue &Q,int &e)){
    if(Q.front==Q.rear){//队空报错 
        return false;
    }
    LinkNode *q = Q.front->next;//指针q指向被删结点 
    e = q->data;
    Q.front->next = q->next;
    if(Q.rear==q){//最后一个结点情况 
        Q.rear = Q.front; 
    }
    free(q);
    return true;
} 

//出队(不带头结点)
bool DeQueue(LinkQueue &Q,int &e)){
    if(Q.front==NULL){//队空报错 
        return false;
    }
    LinkNode *q = Q.front->next;//指针q指向被删结点 
    e = q->data;
    Q.front = q->next;
    if(Q.rear==q){//最后一个结点情况 
        Q.front=NULL;//队头和队尾指针都指向NULL
        Q.rear=NULL;
    }
    free(q);
    return true;
} 

int main(int argc, char** argv) {
    return 0;
}
上一篇:链式队列


下一篇:算法-链表 在带头结点的单链表L中,删除所有值为X的结点,并释放其空间。