链式队列操作集

/* 链表队列操作集 */

#include
#include

typedef int ElemnetType;
typedef struct Node{
    ElemnetType Data;
    struct Node *Next;
}*List;

typedef struct QNode{
    List rear; //队尾指针始终指向单链表尾节点
    List front;//队头指针始终指向单链表头节点
}*Queue;

Queue CreateQueue(); //建立队列
void Enqueue(ElemnetType ch,Queue Q);//入对列
ElemnetType TopElementOfQueue(Queue Q);//取队头元素
void DelQueue(Queue Q);//出队列

int main()
{
    Queue PtrQ;
    PtrQ=CreateQueue();

    for(int i=0;i<10;i++){
        Enqueue(i,PtrQ);
    }

    printf("Top %d\n", TopElementOfQueue(PtrQ));
    system("pause");

    return 0;
}

Queue CreateQueue()
{
    Queue Q;
    Q = (Queue)malloc(sizeof(struct QNode));
    if(Q==NULL) return NULL;
    Q->front=Q->rear=NULL;

    return Q;
}

/*  无表头链表
    元素ch入队,队尾插入 
*/
void Enqueue(ElemnetType ch,Queue Q)
{
    List temp;
    temp=(List)malloc(sizeof(struct Node));

    temp->Data=ch;
    temp->Next=NULL;
    if(Q->rear==NULL){
        Q->rear=Q->front=temp;
    }else{
        Q->rear->Next=temp;
        Q->rear=temp;
    }
}

ElemnetType TopElementOfQueue(Queue Q)
{
    if(Q->front!=Q->rear) //队列不为空
        return Q->front->Next->Data;
}

/* 队列出队,队头删除 */
void DelQueue(Queue Q)
{
    List temp;
    ElemnetType ch;

    if(Q->front=NULL){
        printf("the Queue is empty.\n");
        return;
    }else{
        temp=Q->front;

        if(Q->front==Q->rear){
            Q->front=Q->rear=NULL;  //仅有一个元素
        }else{
            Q->front=Q->front->Next;//多个元素
        }
        ch=temp->Data;
        free(temp);
    }
}

你可能感兴趣的:(链式队列操作集)