队列的实现-链表

声明:

#include "stdio.h"
#include "stdlib.h"

typedef int DataType;
struct Node;
typedef struct Node *PNode;

struct Node {
    DataType info;
    PNode link;
};

struct LinkQueue
{
    PNode f;
    PNode r;
};
typedef struct LinkQueue *PLinkQueue;

 

//创建一个空队
PLinkQueue createEmptyQueue_link(void)
{
    PLinkQueue plqu;
    plqu=(PLinkQueue)malloc(sizeof(struct LinkQueue));
    if (plqu!=NULL) 
    {
        plqu->f=NULL;
        plqu->r=NULL;
    }
    else
    {
        printf("out of space! \n");
    }
    return plqu;
}

 

//判断链表表示的队列是不是空队列
int isEmptyQueue_link(PLinkQueue plqu)
{
    return(plqu->f==NULL);
}

 

//入队运算
void enQueue_link(PLinkQueue plqu,DataType x)
{
    PNode p;
    p=(PNode)malloc(sizeof(struct Node));
    if (p==NULL) 
    {
        printf("out of space! \n");
    }
    else
    {
        p->info=x;
        p->link=NULL;
        //插入前是空队列
        if (plqu->f==NULL) 
        {
            plqu->f=p;
            plqu->r=p;
        }
        else
        {
            //将新节点插入
            plqu->r->link=p;
            //修改队尾指针
            plqu->r=p;
        }
    }
}

 

//出队
void deQueue_link(PLinkQueue plqu)
{
    PNode p;
    if (plqu->f==NULL) 
    {
        printf("Empty queue. \n");
    }
    else
    {
        p=plqu->f;
        //修改队头指针
        plqu->f=p->link;
        free(p);
    }
}

 

//取队列头部结点的值
DataType frontQueue_link(PLinkQueue plqu)
{
    if (plqu->f==NULL) 
    {
        printf("Empty queue. \n");
    }
    else
    {
        return (plqu->f->info);
    }
}

 

测试:

int main(int argv,char *argm[])
{
    PLinkQueue plqu;
    plqu=createEmptyQueue_link();

    enQueue_link(plqu,23);
    
    enQueue_link(plqu,33);
    enQueue_link(plqu,3);
    enQueue_link(plqu,5);
    enQueue_link(plqu,245);
    enQueue_link(plqu,54);
    
    printf("删除前头结点%d \n",plqu->f->info);
    printf("删除前尾结点%d \n",plqu->r->info);

    deQueue_link(plqu);
    printf("删除后头结点%d \n",plqu->f->info);
    printf("删除后尾结点%d \n",plqu->r->info);
    return 1;
}

 

结果:

posted on 2012-05-12 22:56  yucong  阅读(369)  评论(0)    收藏  举报

导航