Home 数据结构及算法 Queue

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <windows.h>

#define DATATYPE int
#define FORM “%d”

typedef struct Queue_Node
{
    DATATYPE data;
    struct Queue_Node *next;
} QNode;

typedef struct
{
    QNode *head;
    QNode *end;
    int queuesize;
} Queue;

BOOL EnQueue(Queue *Q,DATATYPE Elem)
{
    if(!Q) return FALSE;

    if(!Q->head)
    {
        //队列头结点为空
        Q->head=Q->end=(QNode *)malloc(sizeof(QNode));
        if(Q->head==NULL) return FALSE;
        memset(Q->head,NULL,sizeof(QNode));
        Q->head->data=Elem;
        Q->queuesize++;
        return TRUE;
    }
    Q->end->next=(QNode *)malloc(sizeof(QNode));
    if(Q->end->next==NULL) return FALSE;
    memset(Q->end->next,NULL,sizeof(QNode));
    Q->end=Q->end->next;
    Q->end->data=Elem;
    Q->queuesize++;

    return TRUE;
}

BOOL DeQueue(Queue *Q,DATATYPE *Elem)
{
    if(!Q || !Q->head) return FALSE;
    QNode *temp=Q->head;

    Q->queuesize–;   //队列长度减一
    *Elem=Q->head->data;
    Q->head=Q->head->next;
    free(temp);

    return TRUE;
}

BOOL QueueEmpty(Queue *Q)
{
    return Q->head==NULL?TRUE:FALSE;
}

int main(int argc, char* argv[])
{
    Queue Q;
    DATATYPE elem;
    memset(&Q,NULL,sizeof(Queue));

    puts(“入队:”);
    while(1)
    {
        if(scanf(FORM,&elem)!=1) break;
        if(!EnQueue(&Q,elem))
        {
            printf(“入队失败。\n”);
            _getch();
            return -1;
        }
    }

    puts(“出队:”);
    while(!QueueEmpty(&Q))
    {
        DeQueue(&Q,&elem);
        printf(FORM,elem);
        printf(” “);

    }
    _getch();

    return 0;
}

 

0 comment

You may also like

Leave a Comment