链式队列的基本操作(配图)

来源:互联网 发布:java des 加解密 编辑:程序博客网 时间:2024/04/30 02:32

一、结构体结构

队列中储存的内容,本身是一个链表
队头和队尾只是指向这个链表的两个指针,这样就可以使用两个指针控制访问的事件

typedef struct elem{    int date;    elem *next;}elem;typedef struct queue{    elem *tail;    elem *head;}queue;

二、初始化

下图是初始化完结构体的样子

这里写图片描述

void Init(queue *que){    que->head = (elem*)malloc(sizeof(elem));    if (que->head != NULL)    {        que->tail = que->head;        que->head->next= NULL;//易错点    }}

三、入队

下图是插队的过程

这里写图片描述

int enter(queue *que,int date){    elem *p = (elem*)malloc(sizeof(elem));    if (p == NULL)        return -1;    p->date = date;    p->next = NULL;    que->tail->next = p;    que->tail = que->tail->next;    return 0;}

四、出队

下图是出队的过程

这里写图片描述

出队的特殊情况

里写图片描述

int del(queue *que, int &date){    if (que->head == que->tail)    {        date = -1;        return -1;    }    elem *p = (elem*)malloc(sizeof(elem));    p = que->head->next;    date = p->date;    que->head->next = p->next;    if (que->head->next == NULL)    {        que->tail = que->head;    }    free(p);    return 0;//正常出队}

五、判断是否为空

int empty(queue que){    if (que.head->next == que.tail->next)        return 1;    return 0;}

六、取得队首的值

int get(queue que,int &date){    if (que.head->next == NULL)        return -1;    date = que.head->next->date;}

七、整体图

这里写图片描述

原创粉丝点击