Circle Queue in C

本文介绍了一种使用C++实现循环队列的方法,并提供了完整的源代码。通过创建、插入、删除元素等操作演示了循环队列的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!-- lang: cpp -->
#include "stdafx.h"
#include <iostream>
#include <malloc.h>

struct CircleQueue{
	int head;
	int tail;
	int length;
	int isFull;
	int *array;
};

CircleQueue* CreatCircleQueue(int length){
	CircleQueue *q = (CircleQueue*)malloc(sizeof(struct CircleQueue));
	q->length = length;
	q->tail = 0;
	q->head = 0;
	q->array = (int *)malloc(sizeof(int)*length);
	q->isFull = 0;
	return q;
}

int EnterQueue(CircleQueue* q,int x){
	if(q->isFull == -1){
		printf("\nError: The Circle Queue is full!\n");
		return -1;
	}else{
		q->head = q->head + 1;
		if(q->head > q->length - 1)
			q->head = 0;
		if(q->head == q->tail)
			q->isFull = -1;
		q->array[q->head] = x;
	}
	return 0;
}    

int DelQueue(CircleQueue * q){
	if(q->isFull == 0 && q->head == q->tail){
		printf("Error: The Circle Queue is Empty!\n");
		return -1;
	}else{
		q->tail = q->tail + 1;
		if(q->tail > q->length-1)	
			q->tail = 0;
		if(q->tail == q->head)
			q->isFull = 0;

		return 0;
	}
}

int ShowQueue(CircleQueue* q){
	int i,j;
	int flag = 1;
	if(q->isFull == 0 && q->head == q->tail){
		//printf("Queue is Empty!\n");
	}else{
		i = q->head;
		while(1){
			printf(" %d ",q->array[i--]);
			if(i<0)	i=9;
			if(i == q->tail)	break;
		}
		printf("\n");
	}

	return 0;
}    

int main(){
	CircleQueue *q = CreatCircleQueue(10);
	int i,j;
	for(j=1;j<=3;j++){
		for(i=1;i<=5;i++){
			EnterQueue(q,i*j);
			ShowQueue(q);
		}

		for(i=1;i<=5;i++){
			DelQueue(q);
			ShowQueue(q);
		}
	}

	getchar();
	return 0;
}    

在此输入图片描述

转载于:https://my.oschina.net/dongdong2012/blog/115464

\textbf{Algorithm 1.} Granular Ball Generation \textbf{Input:} Image $I \in \mathbb{R}^{H\times W\times 3}$, Entropy map $E_{map}$, Gradient map $G_{map}$, Parameters $\eta, \kappa, \tau, min_r=15, max_r=50, init_r=100$ \textbf{Output:} Granular balls $Balls = \{B_k=(c_k, r_k, \Omega_k)\}$, Topological graph $G=(V,E)$ \begin{enumerate} \item \textbf{Initialize coarse balls:} \begin{itemize} \item $queue \leftarrow \emptyset$, $Balls \leftarrow \emptyset$ \item For $c_x = \frac{init_r}{2}: init_r: W$ and $c_y = \frac{init_r}{2}: init_r: H$: \begin{itemize} \item Create ball $B$ with center $(c_x, c_y)$ and radius $init_r$ \item $queue \leftarrow queue \cup \{B\}$ \end{itemize} \end{itemize} \item \textbf{Adaptive splitting:} \begin{itemize} \item While $queue \neq \emptyset$: \begin{itemize} \item Extract $B$ from $queue$ \item Compute dynamic radius: $r_k \leftarrow \eta \cdot \overline{G_{map}}(\Omega_B) + \kappa \cdot \exp(-H(I_{\Omega_B})/\tau)$ \item \textbf{If} $r_k < min_r$: // Split \begin{itemize} \item $SubBalls \leftarrow \text{SplitBall}(B, r_k)$ \item For each $subB \in SubBalls$: $subB.r > max_r$ ? $queue \leftarrow queue \cup \{subB\}$ : $Balls \leftarrow Balls \cup \{subB\}$ \end{itemize} \item \textbf{Else if} $r_k > max_r$: // Reprocess \begin{itemize} \item $B.r \leftarrow r_k$ \item $queue \leftarrow queue \cup \{B\}$ \end{itemize} \item \textbf{Else}: // Keep \begin{itemize} \item $B.r \leftarrow r_k$ \item $Balls \leftarrow Balls \cup \{B\}$ \end{itemize} \end{itemize} \end{itemize} \item \textbf{Build topological graph:} \begin{itemize} \item $V \leftarrow Balls$, $E \leftarrow \emptyset$ \item For each pair $(B_i, B_j) \in Balls \times Balls$ with $i < j$: \begin{itemize} \item If $\|c_i - c_j\|_2 \leq (r_i + r_j + \tau)$: $E \leftarrow E \cup \{(B_i, B_j)\}$ \end{itemize} \end{itemize} \end{enumerate} \textbf{Function} SplitBall($B$, $r_k$): \begin{itemize} \item Extract features $P$ from $I_{\Omega_B}$ \item Cluster $P$ into $K \leftarrow \lceil B.r / r_k \rceil$ groups via K-means \item For each cluster $C$: \begin{itemize} \item $c_{new} \leftarrow \text{centroid}(C)$ \item $r_{new} \leftarrow \min(r_k, \text{bounding\_radius}(C))$ \item Create new ball $subB(c_{new}, r_{new})$ \end{itemize} \item Return $\{subB\}$ \end{itemize}
最新发布
08-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值