#if 0
NSString *tempStr=[NSString stringWithFormat:@"北京,你好"];
NSString *strUTF=[tempStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@",strUTF);
NSString *strGBK=[strUTF stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@",strGBK);
问题一. 请实现一个顺序循环队列, 要求如下:
1. 队列有一个表头, 和一个表尾。
2. 队列的最大长度为N, N为一个预先定义好的数值
3. 要求实现如下方法:
a) push方法, 表示向表尾插入一个元素
b) front方法, 返回表头的元素
c) pop方法, 删除表头的元素
d) isInList方法, 判断一个元素是否在队列中
e) remove方法, 从队列中删除某个值的元素
f) length方法, 返回队列的实际长度
g) empty方法, 如果队列为空,则返回真, 否则返回假
首先定义一个数组表示一个循环队列。设置最大长度为n,实际队列的表头下标head 表尾下标为tail 初始化head=0,tail=0; 用a[n]={0}表示循环队列。
push方法: 添加一个元素temp;先判断length如果length<n则 a[tail%n]=temp;tail++;否则a[tail%n]=temp;tail++; a[head%n]=0;head++;
front方法:先判断是否为空,如果为空提示一句话,否则返回a[head%n];
pop方法:先判断是否为空,如果为空提示一句话,否则a[head%n]=0;head++;
isInList方法:先判断是否为空,如果为空提示一句话,否则用for循环,(i=0,i<length;++i),判断是否和(head+i)%n相同 ,如果相同则返回1,否则返回0;
remove方法:先判断是否为空,如果为空提示一句话,否则,再获取它的长度length,用for循环,(i=0,i<length;++i),判断是否和(head+i)%n相同 ,如果相同返回i的值,如果i的值小于length/2 则删除这个值的同时把前面的元素往后移动,移动用一个for循环,(j=i,j>0;j--), a[(head+j)%n]=a[(head+j-1)%n]; 最后在for循环外面把a[head%n]=0;否则把后面的值往前移动。如果没有相同的提示一句话。
length方法:返回tail-head;
empty方法:如果tail-head=0则为返回1;否则返回0;
#endif
#define MAX1 10
#import <Foundation/Foundation.h>
int a[MAX1];//定义数组a表示队列,MAX1为最大长度,初始数据全部为0;
int head=0;//初始化表头下标为0;
int tail=0;//初始化表尾下标为0;
int empty(int head,int tail); //判断是否为空的方法。
int Length(int head,int tail); //判断长度。
void push(int *b,int x); //从表尾插入一个元素。
int front(int *b); //返回表头的元素。
int pop(int *b); //删除表头的元素。
int isInList(int *b,int x); //判断元素是否在队列中。
int remove1(int *b,int x); //从队列中删除某个值的元素。
//判断是否为空;
int empty(int head,int tail){
if (tail-head==0) {
return 1;
}
return 0;
}
//判断长度:
int Length(int head,int tail){
return tail-head;
}
//从表尾插入一个元素。
void push(int *b,int x){
int tempLength=Length(head, tail);
if (tempLength<MAX1) {
a[tail%MAX1]=x;
tail++;
}
else{
a[tail%MAX1]=x;
tail++;
a[head%MAX1]=0;
head++;
}
}
//返回表头的元素;
int front(int *b){
int isEmpty=empty(head, tail);
if (isEmpty) {
printf("对不起此队列为空,无法返回\n");
return 0;
}
else{
return a[head%MAX1];
}
}
//删除表头的元素。
int pop(int *b){
int isEmpty=empty(head, tail);
if (isEmpty) {
printf("对不起此队列为空,不能删除\n");
return 0;
}
else{
a[head%MAX1]=0;
head++;
return 1;
}
}
//判断元素是否在队列中。
int isInList(int *b,int x){
int isEmpty=empty(head, tail);
if (isEmpty) {
printf("对不起此队列为空,元素不在这里\n");
return 0;
}
else{
int mylength=Length(head, tail);
for (int i=0; i<mylength; i++) {
if (a[(head+i)%MAX1]==x) {
return 1;
}
}
printf("对不起此队列为空,元素不在这里\n");
return 0;
}
}
//从队列中删除某个值的的元素
int remove1(int *b,int x){
int isEmpty=empty(head, tail);
if (isEmpty) {
printf("对不起此队列为空,元素不在这里不用删除了\n");
return 0;
}
else{
int mylength=Length(head, tail);
for (int i=0; i<mylength; i++) {
if (a[(head+i)%MAX1]==x) {
if (i<mylength/2) {//把前半部分往后移动。
for (int j=i; j>0; j--) {
a[(head+j)%MAX1]=a[(head+j-1)%MAX1];
}
a[head%MAX1]=0;//把移动后的第一个元素赋值为0;
head++;
}
else{//把后半部分往前移动。
for (int j=i; j<mylength; j++) {
a[(head+j)%MAX1]=a[(head+j+1)%MAX1];
}
a[tail%MAX1]=0;//把移动后的第一个元素赋值为0;
tail--;
}
return 1;
}
}
printf("对不起此队列为空,元素不在这里不用删除了\n");
return 0;
}
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
//判断是否为空;
int isEmpty=empty(head,tail);
if (isEmpty) {
printf("此队列为空\n");
}
else{
printf("此队列不为空\n");
}
//判断长度:
int myLength=Length(head,tail);
printf("此队列的长度为:%d\n",myLength);
//向表尾插入一个数。
int *b=a;
push(b,5);
// push(b,6);
push(b,7);
// push(b,8);
//返回表头的元素
int myfront=front(b);
if (myfront) {
printf("表头元素为a[%d]==%d\n",head%MAX1,myfront);
}
//删除表头的元素。
int myPop=pop(b);
if (myPop) {
printf("删除成功\n");
}
//判断某个元素是否在队列中。
int y=isInList(b, 7);
if (y) {
printf("该元素在队列中\n");
}
int z=remove1(b, 7);
if (z) {
printf("删除某个值成功\n");
}
//输出队列的元素。
printf("\n下面是整个表的元素显示:\n");
for (int i=head; i<tail; i++) {
printf("a[%d]=%d\n",i%MAX1,a[i%MAX1]);
}
printf("head==%d,,tail===%d",head,tail);
}
return 0;
}
继续分享12个亲测源码
本系列源码亲自测试
适用环境:Android 2.1
分享给给位初学者,当中有不错的效果值得学习收藏的哦~
很炫的解谜游戏源代码分享
http://www.apkbus.com/android-93029-1-1.html
SurfaceView添加组件view不被组件覆盖
http://www.apkbus.com/android-92787-1-1.html
果果看书源码
http://www.apkbus.com/android-92744-1-1.html
文件浏览器
http://www.apkbus.com/android-92668-1-1.html
Android天气预报源码
http://www.apkbus.com/android-92082-1-1.html
超炫页面特效集合源码
http://www.apkbus.com/android-91831-1-1.html
Activity设置相同的action进行判断源码
http://www.apkbus.com/android-91542-1-1.html
3D相册图片滑动+倾斜+放大+倒影处理源码
http://www.apkbus.com/android-91539-1-1.html
带闪光灯的二维码源码
http://www.apkbus.com/android-91537-1-1.html
用Intent传递网址,在自定义的网页中打开的实例
http://www.apkbus.com/android-91525-1-1.html
下拉通知效果源码
http://www.apkbus.com/android-91365-1-1.html
实现QQ好友列表源码
http://www.apkbus.com/android-91369-1-1.html
@implementation UIImage( resizeAndCropExample ) - (UIImage *) resizeToSize:(CGSize) newSize thenCropWithRect:(CGRect) cropRect { CGContextRef context; CGImageRef imageRef; CGSize inputSize; UIImage *outputImage = nil; CGFloat scaleFactor, width; // resize, maintaining aspect ratio: inputSize = self.size; scaleFactor = newSize.height / inputSize.height; width = roundf( inputSize.width * scaleFactor ); if ( width > newSize.width ) { scaleFactor = newSize.width / inputSize.width; newSize.height = roundf( inputSize.height * scaleFactor ); } else { newSize.width = width; } UIGraphicsBeginImageContext( newSize ); context = UIGraphicsGetCurrentContext(); CGContextDrawImage( context, CGRectMake( 0, 0, newSize.width, newSize.height ), self.CGImage ); outputImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); inputSize = newSize; // constrain crop rect to legitimate bounds if ( cropRect.origin.x >= inputSize.width || cropRect.origin.y >= inputSize.height ) return outputImage; if ( cropRect.origin.x + cropRect.size.width >= inputSize.width ) cropRect.size.width = inputSize.width - cropRect.origin.x; if ( cropRect.origin.y + cropRect.size.height >= inputSize.height ) cropRect.size.height = inputSize.height - cropRect.origin.y; // crop if ( ( imageRef = CGImageCreateWithImageInRect( outputImage.CGImage, cropRect ) ) ) { outputImage = [[[UIImage alloc] initWithCGImage: imageRef] autorelease]; CGImageRelease( imageRef ); } return outputImage; } @end