队列and栈

队列:
生活中的例子:
①买火车票的排队顺序
②打客服电话的顺序…
遵循的原则:先进先出。
(只允许在队列的首部i进行删除操作,这称为“出队”,在队列的尾部j进行插入操作,这称为“入队”。而队列没有元素即i==j,称为空队列,这个时候需要结束循环)
基本元素:一个数组,俩个变量。
例题:解密QQ号
解密规则:首先将第1个数删除,紧接着将第2个数放在这串数的末尾,再将第3个数删除并将第4个数放在这串数的末尾,再将第5个数删除…直到剩下最后一个数,将最后一个数也删除。按照刚才删除 的顺序,把这些删除的数连在一起就是解密后的QQ号。
源码:

#include<stdio.h>//解密QQ号 
int main()
{
	int a[100]={2,2,8,1,0,4,9,3,9,6};	//首先将一个数组 初始化(数组大小应该大一些,因为会把一些数移到这串数的后面) 
	int i=0,j=10;						//i表示第一位,j表示最后一位的下一个数(用来存放后移的数), 
	while(i<j)							//循环条件:i与j之间 具有“有效数字”即:直到剩一个数字a【i】==a【j】时结束循环。 
	{
		printf("%d",a[i]);				
			i++;						//删除一个数就i++,移到后一个数 
		a[j]=a[i];						//新增的数放在a【j】(为什么数组内存需要大一些) 
			i++;						//然后i,j继续后移 
			j++;
	}
	return 0; 
} 

栈:
生活例子:
①手枪装子弹,最后装的先发射
②一个死胡同停车,最后停的需要先开出来
遵循原则:后进先出。
(仅允许在表的一端进行插入和删除运算)
基本元素:一个数组,一个元素。
例题:判断回文字符串
回文字符串:是指正读反读均相同的字符序列。例如:“席主席”,“记书记”,“aha”,“ahaha”…
源码:

#include<stdio.h>//回文判断 
#include<string.h> 
int main()
{
	char a[101],s[101];
	int len,i,mid,next,x=0;
	printf("请输入一个字符串:");
	gets(a);					
	len=strlen(a);				//利用函数得到字符串的 长度len 
	mid=len/2-1;				//我们可以发现回文字符串 是中心对称的  “ahaha” 
								//所以我们要得出中心点的位置, 利用栈 (先进后出)的特点,
	for(i=0;i<=mid;i++)			//将中心位置前的字符串存入一个新的数组中 (入栈)
	{	
		x++;					//★入栈 
		s[x]=a[i];/*s[++x]=a[i];*///这里++x  :前置自增运算符  定义:先执行i自增1,再使用i的值参与计算 
	}							// 	  x++  :后置自增运算符  定义:先使用i的初值参与运算,然后执行i自增1 
	if(len%2==0)				//  判断字符串长度的奇偶性,  
		next=mid+1;				//如果是偶数位: 则中心位下一位:next=mid+1; 
	else
		next=mid+2;				//如果是奇数位:  则中心位下二位:next=mid+2; (为什么+1? mid+1==中心位) 
	for(i=next;i<=len-1;i++)	//从中心位开始循环判断 
	{							//根据栈(先进后出 ,后进先出)
		if(a[i]!=s[x])			//判断中心位后面的字符串与栈里的是否相等 
			break;
		else
			x--;
	}
	if(x==0)					//如果栈里的x 循环到0,则说明  a数组与s数组相等。 
		printf("YES!");
	else
		printf("NO!"); 
	return 0; 
} 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AuCl.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值