`
zjjzmw1
  • 浏览: 1366564 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

ios 循环队列的实现

    博客分类:
  • iOS
ios 
阅读更多

#import "GSTDViewController.h"
#import "AllViewController.h"
@interface GSTDViewController ()

@end

@implementation GSTDViewController
@synthesize myTextField;
- (void)viewDidLoad
{
    [super viewDidLoad];
    head=0;tail=0;  //初始化为空队列。
    counta=0;
}





#pragma mark=======显示所有的方法。============
- (IBAction)showAll:(id)sender {
    NSMutableString *tempStr=[[NSMutableString alloc]init];
    [tempStr appendFormat:@"head==%d,,tail===%d\n",head,tail];
    //输出队列的元素。
    printf("\n下面是整个表的元素显示:\n");
    for (int i=head; i<tail; ++i) {
        printf("a[%d]=%d\n",i%MAX1,a[i%MAX1]);
        [tempStr appendFormat:@"   a[%d]=%d   ,",i%MAX1,a[i%MAX1]];
    }
    printf("head==%d,,tail===%d",head,tail);

    AllViewController *all=[[AllViewController alloc]initWithNibName:@"AllViewController" bundle:nil];
    [self presentViewController:all animated:YES completion:^{
        all.myTextView.text=tempStr;
    }];
   
   
   
   
}
#pragma mark-=====判断队列是否为空的方法======
- (int)isEmpty:(id)sender {
    if (tail-head==0) {
        self.label_IsEmpty.text=@"空";
        return 1;
    }
    self.label_IsEmpty.text=@"不为空";
    return 0;
}
#pragma mark======判断队列的长度的方法。======
- (int)length:(id)sender {
    self.label_Length.text=[NSString stringWithFormat:@"%d",tail-head];
    return tail-head;
}
#pragma mark======返回队列头的方法==========
- (int)head:(id)sender {
    int isEmpty=tail-head;
    if (isEmpty==0) {
        [self alertEmpty];
        return 0;
    }
    else{
        self.label_Head.text=[NSString stringWithFormat:@" %d",a[head]];
        return a[head%MAX1];
    }

}
#pragma mark======删除队列头的方法==========
- (int)delete_head:(id)sender {
    int isEmpty=tail-head;
    if (isEmpty==0) {
        [self alertEmpty];
        return 0;
    }
    else{
        a[head%MAX1]=0;
        head++;
        self.label_Delete_Head.text=@"成功";
        return 1;
    }

}

#pragma mark--====添加到队列尾部的方法=======下面三个方法需要用户输入值。=============
- (void)insert_tail:(id)sender {
    [self insetValue];//调用输入数据的弹出框。
    flag=1;
}
#pragma mark======判断元素是否在队列中的方法。=====
- (int)isIn:(id)sender {
    int isEmpty=tail-head;
    if (isEmpty==0) {
        [self alertEmpty];
        return 0;
    }
    else{
        [self insetValue];//调用输入数据的弹出框。
        flag=3;
    }
    return 1;
}
#pragma mark======删除某个值的方法=============
- (int)delete_value:(id)sender {
    int isEmpty=tail-head;
    if (isEmpty==0) {
        [self alertEmpty];
        return 0;
    }
    else{
       
        [self insetValue];//调用输入数据的弹出框。
        flag=2;
        return 0;
    }
}





//需要用户输入值的时候用到的方法。
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (buttonIndex==1) {
        self.myTextField.text=self.myTextField.text;
    }
    else{
        self.myTextField.text=@"";
    }
    NSLog(@"myTextField.text====%@",myTextField.text);
   
    if (flag==1) {
       [self insertTotail]; 
    }
    if (flag==2) {
        [self deleteValue];
    }
    if (flag==3) {
        [self isIn];
    }
   
}
//用户输入数值后添加到队列尾的方法。
-(int)insertTotail{
    int tempLength=tail-head;
    if ([self.myTextField.text intValue]==0) {
        self.label_Insert_tail.text=@"失败";
        return 0;
    }
    if (tempLength<MAX1) {
        a[tail%MAX1]=[self.myTextField.text intValue];
        tail++;
    }
    else{
        a[tail%MAX1]=[self.myTextField.text intValue];
        tail++;
        head++;
    }
    self.label_Insert_tail.text=@"成功";
    return 1;
}
//用户输入数值后删除某个值的方法。
-(int)deleteValue{
    int mylength=tail-head;
    int  tempa=0;
    for (int i=0; i<mylength; ++i) {
        if (a[(head+i)%MAX1]==[self.myTextField.text intValue]) {
            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--;
            }
            self.label_Delete_value.text=@"成功";
           
            tempa=1;
            counta++;
        }
    }
    if (tempa==1) {//如果tempa==1则证明至少找到过一次。
        counta=1;
        [self deleteValue]; 
    }
    else if(counta==0){//只要是为了判断有多个相同的值的情况。
        self.label_Delete_value.text=@"没有找到元素";
    }
   
    return 0;
}
//用户输入数值后判断该数值是否在方法。
-(int)isIn{
    int mylength=tail-head;
    for (int i=0; i<mylength; ++i) {
        if (a[(head+i)%MAX1]==[self.myTextField.text intValue]) {
            self.label_IsIn.text=@"元素在队列中";
            return 1;
        }
    }
    self.label_IsIn.text=@"元素不在队列中";
    return 0;
}


//弹出队列为空的提示。
-(void)alertEmpty{
    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"对不起" message:@"队列为空" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alert show];
}
//弹出输入数据的提示框。
-(void)insetValue{
    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"请输入一个数字" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    self.myTextField = [[UITextField alloc]
                        initWithFrame:CGRectMake(12, 45, 260, 25)];
    [myTextField setBackgroundColor:[UIColor whiteColor]];
    [alert addSubview:myTextField];
    [myTextField release];
    [alert show];
}

1
0
分享到:
评论
1 楼 吃饱了就饿 2013-01-28  
张老师这是什么啊,有空给我说说啊

相关推荐

    C语言实现使用静态数组实现循环队列源码.zip

    在这里,你可能会找到如何编译和运行代码的说明,以及对循环队列实现的具体描述。 2. **Queue_Array.xcodeproj**:这是一个Xcode项目文件,表明该实现可能是在苹果的Xcode开发环境中编译和测试的。如果你使用Mac OS...

    iOS循环浏览图片

    在iOS开发中,实现图片循环浏览...总之,实现iOS循环浏览图片的关键在于合理利用UIScrollView的contentSize和图片的重用机制。通过这种方式,不仅可以创建出流畅的图片浏览体验,还能有效控制内存使用,提升应用性能。

    ios-无线循环跑马灯.zip

    "ios-无线循环跑马灯.zip" 是一个包含实现无限循环跑马灯效果的项目资源,它源自GitHub上的开源项目——由liuzexin创建并维护的Marquee库。这个库专门用于创建类似于LED显示屏那样的滚动文字效果,常见于APP的标题或...

    ios系统点击源码,实现iphone手机上的系统点击事件

    在iOS中,所有的用户交互都由UIKit框架处理,它通过事件循环来捕获并分发触摸事件。当用户在屏幕上触摸时,这些事件被硬件传感器捕捉,然后转化为触摸对象(UITouch)传递给视图层次结构。每个视图都有机会响应这些...

    iOS-常驻线程之线程循环调用(两个线程循环交替调用)

    解压并运行这个示例,可以帮助你更好地理解如何在iOS中实现两个线程的循环交替调用。 总结来说,常驻线程在iOS开发中用于后台任务处理,通过GCD或NSOperationQueue可以轻松创建和管理这些线程。通过精心设计的线程...

    iOS 常驻线程开启方式

    - 若要使线程常驻,你需要在`main`方法内实现一个循环,持续检查是否有新的任务需要执行。 3. **Grand Central Dispatch (GCD)** GCD是Apple推出的一种基于C语言的多线程技术,它在底层实现了线程管理,开发者...

    iOS开发进阶-完整版

    - GCD(Grand Central Dispatch)原理与应用:串行队列、并行队列的创建与使用。 - NSOperation与NSOperationQueue:了解任务依赖关系管理。 - Run Loop机制:深入理解RunLoop在后台任务执行中的作用。 - **性能...

    iOS 并发编程

    iOS并发编程是针对苹果iOS平台开发过程中实现多任务并行执行的一系列编程技术。它旨在解决在单线程模型中执行多个任务时可能遇到的效率低下的问题。iOS并发编程的学习重点主要包括以下几个方面: 1. Grand Central ...

    iOS各类面试题总结.zip

    Runloop是iOS应用中另一个关键概念,涉及到事件循环和线程管理,面试题可能会要求解释其工作原理和如何合理使用。 在动画部分,面试可能会询问Core Animation的使用,包括CA层的概念、关键帧动画、时间函数和过渡...

    苹果ios推送java服务端耗码demo

    当然,实际项目中还需要考虑异常处理、性能优化、消息队列等复杂情况,但这些基本操作构成了实现推送服务的基础。在TextAps这个文件中,可能包含了具体的Java代码示例,供开发者参考学习。在实践中,结合文档和示例...

    2018秋招iOS面试总结

    - 引用计数(ARC):理解引用计数的工作原理,如何避免循环引用和强引用陷阱。 - Weak和Unowned:知道何时使用它们来解决内存问题。 - Swift中的Deinit和析构函数:了解它们在什么时候被调用以及如何正确使用。 ...

    iOS开发学习之iOS多线程和RunLoop.pdf

    另外,RunLoop是iOS中一个非常重要的概念,它是事件接收循环,用于处理异步事件,其主要作用是维护线程的生命周期。 首先,我们来看看NSThread。NSThread是Objective-C提供的轻量级线程,它允许我们直接操作线程。...

    iOS并发编程指南.pdf

    iOS并发编程指南详细介绍了如何使用GCD和Operation Queues来实现高效的任务并发执行。GCD提供了基于队列的轻量级并发编程方法,而Operation Queues则提供了更面向对象的并发处理方式。此外,还涉及到Dispatch ...

    2020年最新iOS面试题大集合

    1. **多线程**:iOS应用开发中,多线程用于实现并发执行任务,提高应用程序响应速度。主要技术包括NSOperationQueue、GCD(Grand Central Dispatch)和NSThread。GCD是Apple推出的一种高效处理并发的技术,它提供了...

    上海iOS最新面试题汇总

    3. **单例模式**:了解单例的实现方式,以及在iOS中的应用场景。 4. **依赖注入**:理解DI的概念,如何在Swift中实现依赖注入。 5. ** Reactive Programming**:简述ReactiveCocoa或RxSwift的响应式编程思想,及其...

    iOS线程同步方案

    GCD(Grand Central Dispatch)提供了串行队列,它保证了队列上的任务按顺序执行,从而实现线程同步。通过`dispatch_queue_create`创建一个串行队列,然后用`dispatch_async`或`dispatch_sync`提交任务,可以确保...

    ios考试面试题

    面试官可能会问及循环引用(Retain Cycle)的问题及解决办法,如使用弱引用或Block的__weak关键字。 4. **多线程** - GCD(Grand Central Dispatch)是苹果提供的多线程解决方案,理解队列(Dispatch Queue)类型...

    iOS高级经典面试(2019).pdf.zip

    首先,Runloop是iOS中的一个核心概念,它管理着应用程序的事件循环,确保程序在没有用户交互时仍然能够保持运行,有效地节省资源。理解Runloop的工作模式、线程关系和配置选项,是开发者优化性能、处理定时任务的...

    iOS Block使用教程

    - 使用`dispatch_queue_create`创建队列,`dispatch_async`异步提交Block到队列执行,可以实现任务的并发执行。 - `dispatch_sync`同步提交Block,会在当前队列上等待Block执行完成。 6. **Block与网络请求** - ...

Global site tag (gtag.js) - Google Analytics