2023-04-01-队链LinkQueue的基本操作

//队链

#include <stdio.h>
#include <malloc.h>
#include <stdbool.h>

typedef struct LinkNode//定义队链结点
{
    int data;
    struct LinkNode *next;
    
}LinkNode;

typedef struct
{
    LinkNode *front,*rear;
}*LinkQueue;

void initLinkQueue(LinkQueue *Q)//队链初始化
{
    (*Q)=(LinkQueue)malloc(sizeof(LinkQueue));//Q是一个指针,所以需要进行初始化,否则便是一个野指针,没有办法赋值
    
    (*Q)->front = (*Q)->rear = (LinkNode *)malloc(sizeof(LinkNode));//让front和rear指向头结点
    (*Q)->front->next = NULL;
}

bool isEmpty(LinkQueue Q)//判断队链是否为空
{
    if(Q->front == Q->rear)
    {
        return true;
    }
    else
    {
        return false;
    }
}

void EnLinkQueue(LinkQueue *Q,int e)//入队操作
{
    LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode));
    p->data=e;
    p->next=NULL;
    (*Q)->rear->next=p;
    (*Q)->rear=p;
}

bool DeLinkQueue(LinkQueue *Q,int *e)//出队操作
{
    if(isEmpty(*Q))
    {
        return false;
    }
    else
    {
        *e=(*Q)->front->next->data;//因为front指向的是头结点,所以删除的是front的next
        LinkNode *p;
        p=(*Q)->front->next;//因为front指向的是头结点,所以删除的是front的next
        (*Q)->front->next=p->next;
        if((*Q)->rear==p)
        {
            (*Q)->rear=(*Q)->front;//当队链中只有一个结点时,即rear指向的结点,则删除后让rear和front都指向头结点
        }
        free(p);
        return true;
    }
}

int main()
{
    LinkQueue Q;
    initLinkQueue(&Q);
    EnLinkQueue(&Q,666);
    EnLinkQueue(&Q,888);

    int *e;
    int a=0;
    e=&a;

    printf("front_value: %d rear_value: %d\n",Q->front->next->data,Q->rear->data);
    
    DeLinkQueue(&Q,e);
    printf("delete_value: %d",*e);
    printf("front_value: %d rear_value: %d\n",Q->front->next->data,Q->rear->data);
    
    return 0;
}
 

C++:

//队链

#include <stdio.h>
#include <malloc.h>
#include <stdbool.h>

typedef struct LinkNode//定义队链结点
{
    int data;
    struct LinkNode *next;
    
}LinkNode;

typedef struct
{
    LinkNode *front,*rear;
}*LinkQueue;

void initLinkQueue(LinkQueue &Q)//队链初始化
{
    Q=(LinkQueue)malloc(sizeof(LinkQueue));//Q是一个指针,所以需要进行初始化,否则便是一个野指针,没有办法赋值
    
    Q->front = Q->rear = (LinkNode *)malloc(sizeof(LinkNode));//让front和rear指向头结点
    Q->front->next = NULL;
}

bool isEmpty(LinkQueue Q)//判断队链是否为空
{
    if(Q->front == Q->rear)
    {
        return true;
    }
    else
    {
        return false;
    }
}

void EnLinkQueue(LinkQueue &Q,int e)//入队操作
{
    LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode));
    p->data=e;
    p->next=NULL;
    Q->rear->next=p;
    Q->rear=p;
}

bool DeLinkQueue(LinkQueue &Q,int *e)//出队操作
{
    if(isEmpty(Q))
    {
        return false;
    }
    else
    {
        *e=Q->front->next->data;//因为front指向的是头结点,所以删除的是front的next
        LinkNode *p;
        p=Q->front->next;//因为front指向的是头结点,所以删除的是front的next
        Q->front->next=p->next;
        if(Q->rear==p)
        {
            Q->rear=Q->front;//当队链中只有一个结点时,即rear指向的结点,则删除后让rear和front都指向头结点
        }
        free(p);
        return true;
    }
}

int main()
{
    LinkQueue Q;
    initLinkQueue(Q);
    EnLinkQueue(Q,666);
    EnLinkQueue(Q,888);

    int *e;
    int a=0;
    e=&a;

    printf("front_value: %d rear_value: %d\n",Q->front->next->data,Q->rear->data);
    
    DeLinkQueue(Q,e);
    printf("delete_value: %d",*e);
    printf("front_value: %d rear_value: %d\n",Q->front->next->data,Q->rear->data);
    
    return 0;
}

 

posted @ 2023-04-01 14:57  正方形的被子  阅读(77)  评论(0)    收藏  举报