数据结构-链式队列及基本操作

        链式队列的实现思想同顺序队列类似,只需创建两个指针(命名为 top 和 rear)分别指向链表中队列的队头元素和队尾元素。

数据结构-链式队列及基本操作_第1张图片

此时队列中没有存储任何数据元素,因此 top 和 rear 指针都同时指向头节点。

创建队列:

//创建链式队列函数
QNode*initQueue(){
	//创建一个头节点
	Node*queue=(Node*)malloc(sizeof(Node));
	//头节点初始化
	queue->next=NULL;
	re

入队:

链队队列中,当有新的数据元素入队,只需进行以下 3 步操作:

  1. 将该数据元素用节点包裹,例如新节点名称为 elem;
  2. 与 rear 指针指向的节点建立逻辑关系,即执行 rear->next=elem;
  3. 最后移动 rear 指针指向该新节点,即 rear=elem

数据结构-链式队列及基本操作_第2张图片

代码:


QNode* enQueue(QNode*rear,int data){
	//1、创建新节点
	QNode*enElem=(QNode*)malloc(sizeof(QNode));
	enElem->data=data;
	enElem->next=NULL;
	//2、新节点与rear节点建立逻辑关系
	rear->next=enElem;
	//3、rear指向新节点
	rear=enElem;
	//返回新的rear
	return rear; 
}

 

出队:

链式队列中队头元素出队,需要做以下 3 步操作:

  1. 通过 top 指针直接找到队头节点,创建一个新指针 p 指向此即将出队的节点;
  2. 将 p 节点(即要出队的队头节点)从链表中摘除;
  3. 释放节点 p,回收其所占的内存空间;

 数据结构-链式队列及基本操作_第3张图片

代码:
 


void DeQueue(QNode*top,QNode*rear){
	if(top->next==NULL){
		printf("队列为空");
		return;
	}
	QNode*p=top->next;
	printf("%d",p->data);
	top->next=p->next;
	if(rear==p){
		rear=top;
	}
	free(p);
}
 

 完整代码:

#include
#include
typedef struct QNode{
	int data;
	struct QNode*next;
}QNode;

//创建链式队列函数
QNode*initQueue(){
	//创建一个头节点
	QNode*queue=(QNode*)malloc(sizeof(QNode));
	//头节点初始化
	queue->next=NULL;
	return queue; 
} 

QNode* enQueue(QNode*rear,int data){
	//1、创建新节点
	QNode*enElem=(QNode*)malloc(sizeof(QNode));
	enElem->data=data;
	enElem->next=NULL;
	//2、新节点与rear节点建立逻辑关系
	rear->next=enElem;
	//3、rear指向新节点
	rear=enElem;
	//返回新的rear
	return rear; 
}

void DeQueue(QNode*top,QNode*rear){
	if(top->next==NULL){
		printf("队列为空");
		return;
	}
	QNode*p=top->next;
	printf("%d",p->data);
	top->next=p->next;
	if(rear==p){
		rear=top;
	}
	free(p);
}
 
int main() {
    QNode * queue,*top,*rear;
    queue=top=rear=initQueue();//创建头结点
    //向链队列中添加结点,使用尾插法添加的同时,队尾指针需要指向链表的最后一个元素
    rear=enQueue(rear, 1);
    rear=enQueue(rear, 2);
    rear=enQueue(rear, 3);
    rear=enQueue(rear, 4);
    //入队完成,所有数据元素开始出队列
    DeQueue(top, rear);
    DeQueue(top, rear);
    DeQueue(top, rear);
    DeQueue(top, rear);
    DeQueue(top, rear);
    return 0;
}

输出:
数据结构-链式队列及基本操作_第4张图片

 

你可能感兴趣的:(#,数据结构与算法下,数据结构,java,链表)