队列【链表】储存C语言代码+详解

队列的储存还可以用一个单链表来实现。链表最后一个元素不可当作front,因为单链表无法找到前一个元素,因此无法方便进行删除(出队)操作。
由以上分析,front指向链表的第一个元素,rear指向链表最后一个元素。
注:在以下函数中quene q;//为全局变量

基本结构

struct Node//队列中每一个元素的基本结构
{
    ElementType Data;
    struct Node *next;
};
struct Qnode{//链队列结构
    struct Node *rear;//指向队尾结点
    struct Node *front;//指向队首结点
    int size;
};
typedef struct Qnode *quene;

1.出队

ElementType deleteQ(quene q)
 {
     int data;

     if(q->front==NULL)//size=0
       {
           printf("队列空\n");
           return ERROR;
       }
    else
    {
         struct Node *temp;
         temp=q->front;
        if(q->front==q->rear)//队列只有一个元素
        { 
            q->front=NULL;
            q->rear=NULL;  
        }
        else
        {
            q->front=q->front->next;
        }
        data=temp->Data;
        free(temp); 
        q->size--;
        return data;//返回出队的元素值
    }
 }

2.入队

void addQ(quene q,int X)
{
    struct Node *idx;
    idx=(struct Node*)malloc(sizeof(struct Node));
    idx->Data=X;
    if(q->front==NULL)//队列此时为空
       {
           q->front=idx;
           q->rear=idx;     
       }
    else
    {
        q->rear->next=idx;
        q->rear=idx;
    }
     idx->next=NULL; 
     q->size++;
}

猜你喜欢

转载自blog.csdn.net/qq_45955041/article/details/106979708