Chinaunix首页 | 论坛 | 博客
  • 博客访问: 335758
  • 博文数量: 72
  • 博客积分: 2130
  • 博客等级: 大尉
  • 技术积分: 857
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-05 16:10
文章分类

全部博文(72)

文章存档

2010年(5)

2009年(14)

2008年(53)

分类: C/C++

2008-10-07 12:40:12

#include
#include
#include

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

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

void InitQueue(LinkQueue *Q)
{
        Q->rear=(QueuePtr)malloc(sizeof(QNode));
        Q->front = Q->rear;
        if(!Q->front)
                printf("memory alloc error\n");
        Q->front->next=NULL;
}

void DestroyQueue(LinkQueue *Q)
{
        while(Q->front)
        {
                Q->rear=Q->front->next;
                free(Q->front);
                Q->front=Q->rear;
        }
}

void ClearQueue(LinkQueue *Q)
{
        QueuePtr p, q;
        Q->rear=Q->front;
        p=Q->front->next;
        Q->front->next=NULL;
        while(p)
        {
                q=p;
                p=p->next;
                free(q);
        }
}

void EnQueue(LinkQueue *Q, int value)
{
        QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
        if(p==NULL)
                printf("memory alloc error\n");
        p->data = value;
        p->next = NULL;
        Q->rear->next = p;
        Q->rear = p;
}

void DeQueue(LinkQueue *Q)
{
        if(QueueEmpty(Q))
                printf("Queue is empty");
        QueuePtr p = Q->front->next;
        Q->front->next = p->next;
        if(Q->rear == p)
                Q->rear=Q->front;
        free(p);
}

int QueueEmpty(LinkQueue *Q)
{
        if(Q->front->next==NULL)
                return 1;
        else
                return 0;
}

int QueueLength(LinkQueue *Q)
{
        int i=0;
        QueuePtr p;
        p=Q->front;
        while(Q->rear != p)
        {
                i++;
                p=p->next;
        }
        return i;
}

int QueueFront(LinkQueue *Q)
{
        if(QueueEmpty(Q))
                printf("Queue is empty\n");
        return Q->front->next->data;
}

void PrintLinkQueue(LinkQueue *Q)
{
        QueuePtr p;
        p=Q->front->next;
        while(p)
        {
                printf("%4d",p->data);
                p=p->next;
        }
        printf("\n");
}
int main(void)
{
        LinkQueue *Q=(LinkQueue *)malloc(sizeof(LinkQueue));

        InitQueue(Q);

        EnQueue(Q,1);
        EnQueue(Q,2);
        EnQueue(Q,3);
        EnQueue(Q,4);
        EnQueue(Q,5);

        printf("打印该队列\n");
        PrintLinkQueue(Q);

        printf("该队列的长度为: %d\n", QueueLength(Q));

        printf("返回队列头部的元素\n");
        printf("%4d",QueueFront(Q));
        printf("\n");

        printf("插入一个元素6后的队列:\n");
        EnQueue(Q,6);
        PrintLinkQueue(Q);

        printf("删除一个元素后的队列:\n");
        DeQueue(Q);
        PrintLinkQueue(Q);

        return 0;


        return i;
}


阅读(799) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~