数据结构之队列

基本要求:

1,队列的基本概念

2,队列的顺序结构

3,队列的链式结构

4,队列的应用

5,特殊矩阵的压缩存储


一,队列的基本概念

1,定义:队列(queue),与栈相类似,也是一种操作受限的线性表,其限制于仅允许在表的一端进行插入,在标的另一端进行删除。可插入的一端称为队尾(Rear),可删除的一端称之为对头(Front)。向队列中插入新的元素称之为进队,进队之后称为队尾元素;从队列中删除元素称为出队,该元素出队后,其后相邻的元素成为新的对头元素。

2,特点:先进先出(FIFO)。

注:队列按存储结构可分为顺序队和链队两种。

1,顺序队:

基本操作:


1>.初始化队列:

void initQueue(SqQueue &qu)
{
	qu.front=qu.rear=0;	
}


2>.判队空:

int QueueEmpty(SqQueue qu){
	if(qu.front==qu.rear)
		return 1;
	else 
		return 0;
} 


3>.进队:

int enQueue(SqQueue &qu,int x){
	if((qu.rear+1)%maxsize==qu.front)
		return 0;
	qu.rear=(qu.rear+1)%maxsize;
	qu.data[qu.rear]=x;
	return 1; 
}

4>.出队:

int deQueue(SqQueue &qu,int &x){
	if(qu.front==qu.rear)
		return 0;
	qu.front=(qu.front+1)%maxsize;
	x=qu.data[qu.front];
	return 1;
} 

链队:采用链表存储结构存储队列(采用单链表的形式),链队特点:不存在队列满上溢的情况(当内存满了就上溢了)。

1.链队的要素:

有两个特殊状态和操作。

①两个状态

1>队空状态。

lqu->rear==NULL或lqu->front==NULL;

2>队满状态。

不存在队列满的情况(假设内存无限大的情况下不存在)。

②两个操作

1>元素进队操作(假设p指向进队元素)

lqu->rear->next=p;
lqu->rear=p;
2.

1>初始化链队

void initQueue(LiQueue *&lqu){
	lqu=(LiQueue *)malloc(sizeof(LiQueue));
	lqu->front=lqu->rear=NULL;
}

2>判断队空

int QueueEmpty(LiQueue *lqu){
	if(lqu->rear==NULL||lqu->front==NULL)
		return 1;
	else
		return 0;
} 

3>入队

void enQueue(LiQueue *lqu,int x){
	QNode *p;
	p=(QNode *)malloc(sizeof(QNode));
	p->data=x;
	p->next=NULL;
	if(lqu->rear==NULL)
		lqu->front=lqu->rear=p;
	else{
		lqu->rear->next=p;
		lqu->rear=p;
	}
}

4>出队

int deQueue(LiQueue *lqu,int &x){
	QNode *p;
	if(lqu->rear==NULL)
		return 0;
	else
		p=lqu->front;
	if(lqu->front==lqu->rear)
		lqu->front=lqu->rear=NULL;
	else
		lqu->front=lqu->front->next;
	x=p->data;
	free(p);
	return 1; 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值