数据结构(C实现)------- 顺序队列(循环队列之少用一个存储空间实现) .

      上节已经提到有三种方法来实现循环顺序队列,其中第一种设立标识不常用,最常的就是后两种,上一节已经讨论了用计数器来实现循环顺序队列,这节就用第三种方法,也就是少用一个存储空间来实现循环顺序队列,其基本操作和用计数实现类同,下面是具体实现:

顺序队列(循环队列)类型描述:
//顺序队列的类型描述
#define MAXSIZE 5
typedef int ElemType;
typedef struct{
	ElemType *data;
	int front,rear;
}SqQueue;

 

基本操作:

         1. 初始化顺序队列(循环队列) Init_SqQueue(SqQueue* Q)

void Init_SqQueue(SqQueue* Q){
    Q->data = (SqQueue*)malloc(sizeof(SqQueue) * MAXSIZE);

	Q->front = Q->rear = 0;	
}

 

        2. 销毁顺序队列(循环队列)Destroy_SqQueue(SqQueue* Q)

void Destroy_SqQueue(SqQueue* Q){
	if(Q->data){
		free(Q->data);
		Q->front = Q->rear = 0;
	}
} 

 

       3. 清空顺序队列(循环队列)Clear_SqQueue(SqQ

  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
顺序循环队列一种使用顺序存储结构实现队列。它通过将队列的首尾相连,构成一个循环的结构,解决了普通队列在出队操作时需要移动元素的问题,提高了算法效率。[2] 顺序循环队列的结构定义如下: ```c #define SIZE 8 typedef struct Queue { int elem[SIZE]; // 存放队列元素 int front; // 队头 int rear; // 队尾 } Queue, *QueueS; ``` 其中,`elem`数组用于存放队列元素,`front`表示队头的位置,`rear`表示队尾的位置。当队列为空时,`front`和`rear`的值相等;当队列满时,`rear`的下一个位置就是`front`。通过这种方式,可以实现循环利用队列存储空间顺序循环队列的操作包括入队和出队操作。入队操作将元素插入到队尾,同时更新`rear`的位置;出队操作将队头元素删除,同时更新`front`的位置。当队列满时,无法进行入队操作;当队列为空时,无法进行出队操作。因此,需要额外的判断条件来判断队列是否满或为空。 顺序循环队列实现可以通过取模运算来实现循环的效果,即在计算`rear`和`front`的位置时,使用`(rear + 1) % SIZE`和`(front + 1) % SIZE`来计算新的位置。 总结来说,顺序循环队列一种通过循环利用队列存储空间来提高算法效率的数据结构。它使用顺序存储结构实现,通过将队列的首尾相连构成循环结构,解决了普通队列在出队操作时需要移动元素的问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值