数据结构.队列(C语言实现)

#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

#define Status int
#define OK    1
#define ERROR    0
#define    QElemType    int

typedef struct QNode {
    QElemType    data;
    struct     QNode    *next;
}QNode,    *QueuePtr;

typedef    struct {
    QueuePtr    front;
    QueuePtr    rear;
}LinkQueue;



//Init queue

Status    InitQueue(LinkQueue *Q)
{
    Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
    if(!Q->front)
    {
        printf("****** malloc failed ******");
        return ERROR;
    }

    Q->front->next=NULL;
    return OK;

}


/*delete Queue*/
Status DestoryQueue(LinkQueue *Q)
{
    while (Q->front)
    {
        Q->rear = Q->front->next;
        free(Q->front);
        Q->front=Q->rear;
    }
    return OK;

}


/*enqueue*/
Status    EnQueue(LinkQueue *Q, QElemType e)
{
    QueuePtr    p=NULL;
    p=(QueuePtr)malloc(sizeof(QNode));
    if (!p)
    {
        printf("****** malloc failed ******");
        return ERROR;
    }
    p->data = e;
    p->next = NULL;
    Q->rear->next=p;
    Q->rear=p;
    
    return OK;
}

// Dequeue
Status DeQueue(LinkQueue *Q, QElemType e)
{
    QueuePtr    p;
    if (Q->front == Q->rear)
        return ERROR;

    p=Q->front->next;
    e=p->data;
    printf("\n%d is take out from Queue!\n",e);
    Q->front->next= p->next;
    
    if (Q->rear == p)
        Q->rear = Q->front;
        
    free(p);
    return OK;        
}

int main(void)
{
        LinkQueue    Q1;
        int i,n,e;
        char ch,ch2;
        int mark;
        /*if ((InitQueue(&Q1)) == OK)
            printf("Init success !\n");
        else
            printf("****** Fail to init Queue !\n");
        */
        InitQueue(&Q1);
        
        printf("Please input value for n:    ");
        scanf("%d",&n);
        
        for (i=1; i <= n; ++i)
        {
            printf("input values(e) for number %d:\t", i);
            scanf("%d",&e);
            if ((EnQueue(&Q1,e)) != OK)
                break;
        }
        printf("###### data fill queue! \n#######");
        sleep(1);
        
        /*printf("Do you want to delete Queue ?     Y|y/N|n");
        scanf("%c",&ch);
        if (ch =='Y' | ch=='y')
            mark=1;
        else
            mark=0;
        if (mark)
            DeQueue(&Q1,e);
        mark=0;*/
        
        /*
        printf("Do you want to destory Queue ?     Y|y/N|n");
        scanf("%c",&ch2);
        if (ch2 =='Y' | ch2=='y')
            mark=1;
        else
            mark=0;
        if (mark)
            DestoryQueue(&Q1);
        mark=0;
        */            
        while (n>0)
        {
            DeQueue(&Q1,e);
            n--
        }

        return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值