数据结构—链队(C/C++版)

本文为CSDN博主coder_gxd原创

转载请注明:https://blog.csdn.net/coder_gxd/article/details/79852909


本文介绍数据结构中链队的常用算法(C/C++版),欢迎各位同学讨论指正。

#include <stdlib.h>//函数malloc(),free()所在头文件     
//本文链队为不含头结点的链队 
  
//定义链队结点  
typedef struct QNode {//链队结点定义延用单链表定义   
    int data;//数据域   
    struct LNode *next;//指针域   
}QNode; 
//定义链队类型
typedef struct {//链队一般认为不会队满,除非内存溢出; 
	QNode *front;//队首指针 
	QNode *rear;//队尾指针 
}LiQueue;

//初始化链队,时间复杂度为O(1);
//创建链队,并且队头队尾指针均指向NULL;
void initQueue (LiQueue *&lqu){
	lqu=(LiQueue *)malloc(sizeof(Liqueue));
	lqu->front=NULL;
	lqu->rear=NULL;
} 

//判断队空,时间复杂度为O(1);
//队空返回1,否则返回2;
int isQueueEmpty(LiQueue *lqu){
	if(lqu->rear==NULL||lqu->front=NULL){//队首或队尾指向NULL 
		return 1;
	}
	else{
		return 0;
	}
}

//入队算法,时间复杂度为O(1);
//创建新结点p,若原链队空,则队头和队尾均指向p;若原链表不为空,将p结点链在队尾后,队尾指针指向p; 
void EnQueue(LiQueue *lqu,int x){
	QNode *p=(LNode *)malloc(sizeof(QNode));
	p->data=x;
	p->next=NULL;//这三句句创建了链队结点p,并将数据 x 置入结点中;
	if(lqu->rear==NULL||lqu->front==NULL){//若链队为空,则队头队尾均指向p; 
		lqu->front=p;
		lqu->rear=p;
	}
	else{//原链表不为空,将p结点链在队尾后,队尾指针指向p; 
		lqu->rear->next=p;
		lqu->rear=p;
	}
}

//出队算法,时间复杂度为O(1);
//将链队lqu的队首元素出队,若队空失败,则返回0;若成功,则返回1;
int DeQueue(LiQueue *lqu,int &x){
	QNode *p;//用于存储出队的结点;
	if(lqu->rear==NULL){//队空不出,返回0; 
		return 0;
	} 
	else{
		p=lqu->front;//p指向队首结点 
	}
	if(lqu->front==lqu->rear){//特殊情况,队内仅有一个元素 
		lqu->rear=NULL;//队尾指向0; 
		lqu->front=NULL;//队首指向0; 
	}
	else{
		lqu->front=lqu->front->next;//队首指针前进一位; 
	}
	x=p->data;//将出队结点数据元素赋值给 x ;
	free(p);//释放 p 结点; 
	return 1; 
} 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值