链式队列设计

一、链式队列
含义:队列的链式存储实现叫做链式队列。

本质:队列头 + 带头结点的链表

二、数据类型的设计
[1]链表结点数据类型的设计
typedef int DataType;
typdef struct node
{
DataType data;  //链表结点存储数据
struct node *next; //保存下一个结点的地址
}LinkNode;

[2]队列头的设计
typedef struct{
LinkNode *front;//保存头结点的地址
LinkNode *rear; //保存尾结点的地址
}LinkQueue;

三、链式队列常用操作
<1>为头结点和队列头在堆区分开空间,q->front = q->rear = head;
LinkQueue *create_empty_linkqueue()
{
//新创建一个队头,并分配空间。用q保存首地址

//在创建一个链表头,头结点的指针域置为NULL

//队头的q->front和q->front都保存头结点的首地址

//返回队列头首地址
}
<2>判断队列是否为空 q->front == q->rear
int is_emtpy_linkqueue(LinkQueue *q)
{
return q->front == q->rear;
}
<3>入队,类似于链表的尾插法,每次在尾结点后插入数据
int enter_linkqueue(LinkQueue *q,DataType data)
{
//创建一个新的链表节点,用temp保存,并分配空间


 //类似于单链表的尾插法,每次创建都是尾结点,
 //把temp指针域置为NULL,利用尾结点q->rear插入temp
 
 //更新rear的值
 
 return 0;
}

<4>出队,删头发出队,思路:删除前一个结点(从头结点开始),出后一个
结点的数据。删除完毕。最后剩的结点,就是头结点
DataType delete_linkqueue(LinkQueue *q)
{
linknode *temp = NULL;

//思路:删除原头结点,出后一个结点的数据。
//      使后一个结点成为新的头结点

//1.用temp保存原来头结点的首地址

//2.更新q->front,让他指向后一个数据

//3.释放temp的空间

//4.返回新的头结点的数据
}

int main()
{
    LinkQueue *q = NULL;
    int i = 0;


    q = create_empty_linkqueue();


    for(i = 0;i < 10;i++)
    {
        enter_linkqueue(q,i);
    }

    while(!is_empty_linkqueue(q))
    {
        printf("%-3d",delete_linkqueue(q));
    }
    putchar('\n');
    
    return 0;
}
发布了20 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/pan337520/article/details/53353664