算法总结 队列(c语言实现)

队列 总结

首先是一道题,简单的算法题

解密QQ号
每次从前面拿两个,第 1 个扔掉,第 2 个 放到尾部。循环
解密的第一步是将第一个数删除,简单的方法是将所有后面的数都往前面挪动一位,将前面的数覆盖。然后让最后一个位置的值变成移到尾部的数值,循环
实现的代码,如下

#include <stdio.h>

main(){
	int a[10],t,m;
	for(int i=0;i<10;i++){
		scanf("%d",&a[i]);
	}
	//从左到右,每两位分为一组 
	for(int j=1;j<8;j++){
		t = a[j];//拿出每组第二个数 
		for(m=j+1;m<10;m++){//放到末尾,并且数组左移 
			a[m-1] = a[m]; 
		}
		a[m] = t;//让最后一个位置的值为
		
		//可以看一下中间数据的变化,我感觉比调试好一点
		//printf("\n");
		//for(int n=0;n<10;n++){
		//printf("%d ",a[n]);
//提供一组数据 1261667125
	}
	}
	printf("\n");
	for(int n=0;n<10;n++){
		printf("%d ",a[n]);
	}
}

但是上面的算法比较费时间,下面使用head tail来记录队列的队首和队尾的下一个位置。至于为什么tail记录队尾的下一个位置时,是因为如果只有一个元素时,对首和对尾相同,不好使用while跳出循环。

#include <stdio.h> 
int main() {  
		//该算法就是把前面空间的要移的数移到后面的多出来的空间
		//浪费了内存,但是节省了时间   
		int q[22],head,tail,i; 
 
 		for(int i=0;i<10;i++){
			scanf("%d",&q[i]);
		}
	    head=0;   
		tail=10; //队列中已经有10个元素了,tail指向队尾的后一个位置  
		while(head<tail){ //当队列不为空的时候执行循环         
			printf("%d ",q[head]);//打印队首并将队首出队       
			head++;   
			  
			q[tail]=q[head];//先将新队首的数添加到队尾     
			 tail++;        
			 //再将队首出队      
			head++;   
		}      
		 //我感觉while中的语句结合数据会好理解一点
		return 0; 	
} 
  • 队列是一种特殊的线性结构,它只允许在队列的首部(head)进行删除操作,这称为“出队”,而在队列 的尾部(tail)进行插入操作,这称为“入队”。当队列中没有元素时(即 head==tail),称为 空队列。

  • 队列将是我们今后学习广度优先搜索以及队列优化的 Bellman-Ford 短路算法的核心 数据结构。所以现在将队列的三个基本元素(一个数组,两个变量)封装为一个结构体类型, 如下。
#include <stdio.h> 

struct queue {     
	int data[100];//队列的主体,用来存储内容   
 	int head;//队首  
    int tail;//队尾 
}; 
 
int main() {   
  	struct queue q;    
   	int i;
    q.head=1;
	q.tail=1;    
	for(i=1;i<=9;i++){ //依次向队列插入9个数       
		scanf("%d",&q.data[q.tail]);    
		q.tail++;    
	}        
	while(q.head<q.tail) //当队列不为空的时候执行循环   
	{//打印队首并将队首出队      
		printf("%d ",q.data[q.head]);       
		q.head++; 
		//先将新队首的数添加到队尾   
		q.data[q.tail]=q.data[q.head];        
		q.tail++; 
		//再将队首出队  
		q.head++;     
	}        
			
		return 0;
}

学习算法,如果有像我这样的小白,推荐可以看《啊哈 !算法》
2020/3/24/19/50

发布了21 篇原创文章 · 获赞 5 · 访问量 732

猜你喜欢

转载自blog.csdn.net/weixin_45862170/article/details/105078832