链式队列 (c语言)

版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/qq_42259578 https://blog.csdn.net/qq_42259578/article/details/84330557

结构体

结点结构体

typedef struct TreeNODE
{
    char date;
    struct TreeNODE *next;
}Queue;

队头、尾结构体:

typedef struct
{
    Queue *front;
    Queue *rear;
}Piont;

 初始化

//初始化
void chongqueue(Piont *p)
{
    p->front=NULL;
    p->rear=NULL;
}

使队列头尾指针指向都为NULL

入栈

oid inqueue(Piont *p,char x)
{
    Queue *u;

        u=(Queue*)malloc(sizeof(Piont));
        u->date=x;
        u->next=NULL;
        if(p->rear!=NULL)
        {
            p->rear->next=u; //
            p->rear=u;  //将队尾指针指向新插入的节点上
        }
        if(p->front==NULL)
        {
            p->front=u;
        }

}

构建一个结点,将一个元素入栈所以队头指针指向第一个元素,此时rear指向第一个不为空的结点,当第二个元素进站时,就可以将结点赋值给rear->next,然后将队尾指针指向第二个结点。

下面是顺序结构

出栈

int deleteQueue(Piont *p,char *ch)
{
    Queue *q;
    if(p->front==NULL)
    {
        printf("队列为空\n");
        return 0;
    }
    else{
        *ch =p->front->date;
        q =p->front;
        p->front=p->front->next;
        if(p->front==NULL)
        {
            p->rear=NULL;
        }
      free(q);
      return 1;

    }
}

   新建一个结点指针,让此结点也指向栈顶元素,然后让头指针指向下一个结点,free掉新建的结点;而当删除最后一个结点,要使队尾指针为空。

获取栈顶元素

char getQueue(Piont *p)
{
    char ch;
    if(p->front==NULL)
    {
        printf("队列为空\n");
        return 0;
    }
    else{
        ch = p->front->date;
        return ch;
    }
}

main函数

int main()
{
    Piont p;  //二级指针指向指针,指针指向结构体变量或普通变量
    char x;
    chongqueue(&p);
    inqueue(&p,'A');

    inqueue(&p,'B');
    inqueue(&p,'D');
    x=getQueue(&p);
    printf("%c\n",x);
    return 0;
}

完整代码   

#include <stdio.h>
#include <stdlib.h>

typedef struct TreeNODE
{
    char date;
    struct TreeNODE *next;
}Queue;

typedef struct
{
    Queue *front;
    Queue *rear;
}Piont;

//初始化
void chongqueue(Piont *p)
{
    p->front=NULL;
    p->rear=NULL;
}
//入栈
void inqueue(Piont *p,char x)
{
    Queue *u;

        u=(Queue*)malloc(sizeof(Piont));
        u->date=x;
        u->next=NULL;
        if(p->rear!=NULL)
        {
            p->rear->next=u; //
            p->rear=u;  //将队尾指针指向新插入的节点上
        }
        if(p->front==NULL)
        {
            p->front=u;
        }

}
//出栈
int deleteQueue(Piont *p,char *ch)
{
    Queue *q;
    if(p->front==NULL)
    {
        printf("队列为空\n");
        return 0;
    }
    else{
        *ch =p->front->date;
        q =p->front;
        p->front=p->front->next;
        if(p->front==NULL)
        {
            p->rear=NULL;
        }
      free(q);
      return 1;

    }
}
//取队头元素
char getQueue(Piont *p)
{
    char ch;
    if(p->front==NULL)
    {
        printf("队列为空\n");
        return 0;
    }
    else{
        ch = p->front->date;
        return ch;
    }
}

int main()
{
    Piont p;  //二级指针指向指针,指针指向结构体变量或普通变量4r-
    char x;
    chongqueue(&p);
    inqueue(&p,'A');

    inqueue(&p,'B');
    inqueue(&p,'D');
    x=getQueue(&p);
    printf("%c\n",x);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42259578/article/details/84330557