数据结构与算法系列-队列-顺序队列

定义:

队列:

队列也是一种特殊的线性表,它仅允许在表的一端进行插入,在表的另一端进行删除,允许插入的一端称为队尾(rear),允许删除的一端称为对首(front)。

在队列数据结构中,遵循先入先出原则。因此又把队列称为先进先出表(First In Fist Out,简称FIFO)

比如说 我们坐火车的时候 火车进入隧道,车头先进入隧道,也是先从隧道出来。




队列顺序存储结构称为顺序队列,顺序队列与顺序表一样,用一个一维数组来存放数据元素。在内存中,用一组连续的存储单元顺序存放队列中的元素。

队列为空:

Front=rear=-1'

Front = read

队满:

Rear=MAXLEN -1;

队列的入队与出队。

#include<stdio.h>
#define MAXLEN 10
typedef int elementtype;
typedef struct{
	elementtype element[MAXLEN];/*存放队列元素的数组*/
	int front,rear;
}SeQueue;

SeQueue InitQueue_sq(){/*建立一个空队列Q*/
	SeQueue q;
	q.front = -1;
	q.rear = -1;
	return(q);
}

int GetFront_sq(SeQueue *q,elementtype *x){/*取队头元素 若队列q非空 用*x 返回其元素*/
	if(q->front == q->rear)
		return (0);
	else{
		*x = q->element[(q->front)+1];
		return (1);
	}
}


int Enqueue_sq(SeQueue *q,elementtype x){/*入栈操作 若队列q未满 将元素x入列*/
	if(q->rear == MAXLEN -1)
		return(0);
	q->rear++;
	q->element[q->rear] = x;
	return(1);
}	

int Delqueue_sq(SeQueue *q,elementtype *x){
	if(q->front == q->rear)
		return(0);
	else{
		q->front++;
		*x=q->element[q->front];
		return(1);
	}
}

int Empty_sq(SeQueue *q){
	return(q->front == q->rear);
}


void print(SeQueue q){
	int i;
	if(q.front!=q.rear){
		printf("Output elements of queue: ");
		for(i=q.front+1;i<=q.rear;i++)
			printf("%d",q.element[i]);
	}else
		printf("The queue is empty!");	
	printf("\n");
}

main(){
	SeQueue queue;
	int i;
	elementtype y;
	elementtype z;
	queue = InitQueue_sq();
	if(Empty_sq(&queue)!=0)
		printf("the queue is empty");
	else
		printf("the queue is not empty");
	printf("\n Adding 5 element to queue: ");
	for(i=1;i<=5;i++){
		scanf("%d",&y);
		Enqueue_sq(&queue,y);
	}
	print(queue);
	GetFront_sq(&queue,&z);
	printf("Element of the head is: %d\n",z);
	print(queue);

	printf("\n Delete 2 elements from queue: ");
	for(i=1;i<=2;i++){
		Delqueue_sq(&queue,&z);
		printf("%d",z);
	}
	printf("\n");
	print(queue);
	if(Empty_sq(&queue)!=0)
		printf("the queue is empty");
	else
		printf("the queue is not empty");

}

若存储队列的一位数组中所有位置上都有元素,即尾指针指向一维数组最后,而头指针指向一维数组开头,则队列满。这是不能再向队列中插入元素

但是还有一种情况,尾指针指向一维数组最后,但前面有元素已经出队,这时插入元素,仍会发生溢出,而实际上队列并未满。这称为“假溢出”。为解决这个问题,

需要了解循环队列。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值