`
zjjzmw1
  • 浏览: 1354262 次
  • 性别: 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  
张老师这是什么啊,有空给我说说啊

相关推荐

    IOS开发中异步网络请求上实现同步逻辑

    IOS开发中异步网络请求上实现同步逻辑 前提: 可能遇到一些问题,比如上传多个数据,需要等多个数据上传成功后做一定的处理,而且一个个上传,万一哪个上传失败了,后面就不需要上传了,直接报错。 之前ASI的网络库...

    leetcode答案-iOS-:在网上找的一些iOS面试资料

    iOS面试题-----进程、线程、多进程、多线程、任务、队列、NSThread、GCD、NSOprationQueue... 8、2019 iOS面试题-----多线程相关之GCD、死锁、dispatch_barrier_async、dispatch_group_async、Dispatch Semaphore 9...

    程序员为什么还要刷题-iOS-Interview::books:iOS开发者职位面试通过的综合问题清单

    也称为循环缓冲区。 一个特定大小的数组,从概念上讲回到开头。 列表 链接列表。 通过链接连接的数据项序列。 涵盖单链表和双链表。 跳过列表。 跳过列表是一种概率数据结构,具有与 AVL/ 或红黑树相同的对数时间...

    百度地图开发java源码-iOS_develop_learning_routes:iOS开发学习路线

    Queue(队列) Union Find(并查集) 内存 循环引用 内存管理 内存布局 TaggedPointer 引用计数 弱引用表 ARC、MRC 自动释放池 多线程 NSThread GCD NSLock NSRecursiveLock OSSpinLock @synchronized POSIX pthread...

    Computer-Science-with-iOS:iOS中的计算机科学知识,数据结构,算法的集合-Swift

    同步和异步执行区分同步和异步调用/功能队列-串行和并发服务质量优先级倒置线程数结合框架操作和操作队列GCD API: 调度工作项派遣组信号量派送壁垒 循环语句分支机构声明带标签的声明控制转移表推迟陈述做陈述...

    iOS关于多张图片上传、地址返回顺序问题及解决方案

    需求是怎样的:for 循环里面、多个网络请求上传图片,每次上传一张,至于为什么每次只上传一张呢,因为上传一张将要返回图片存储服务器的地址,然后再把地址作为请求参数,请求自己服务器的 API。 过程可以说曲折,...

    Android代码-BluetoothLELibrary

    自带消息队列(终于可以像iOS一样啦,不用去写延时啦)。 支持同时开启多个通知。 可以连续操作发送数据、读取特征、开启通知,即使你在for循环中写也没问题,自带队列。 扫描操作支持-&gt; 设置扫描时长、根据设备名称...

    NSOperationDependency

    循环依赖注意:不要用循环依赖循环依赖在iOS不同的版本的表现是不一样额。之前的会直接死锁。现在会直接不执行,但还是不要用跨队列指定依赖关系//通知是在主队列完成,也验证了依赖关系可跨队列指定!![...

    gear-lib通用的C基础库.rar

    gear-lib通用的C基础库,包含很多牛逼的库源码,可以编译后使用集成到自己项目中,全部用POSIX C实现,目标是为了跨平台兼容 linux, windows, android, ios. * 适用于物联网,嵌入式,以及网络服务开发等场景 !...

    leetcode二进制signal-careers-technical-interviewing-resources-ios-0916:职业技

    循环链接 队列 堆栈 堆 树木 二叉树 二叉搜索树 尝试 自平衡树 遍历树 广度优先搜索 - BFS 深度优先搜索 - DFS 前序、中序、后序 图表 Dijkstra 算法 / A* 搜索 哈希映射 处理碰撞 排序算法 插入 选择 合并 快的 ...

    LiveSendGift:直播发送弹幕效果

    感谢得益于某位不愿留名的同学的帮助,队列模式已经较好的实现了。重要信息2017年09月25日18:42:00 修复了在iOS11下必现EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)的崩溃BUG。已知bug提示:在替换模式...

    C++大学教程,一本适合初学者的入门教材(part2)

    2.13 计数器控制循环的要点 2.14 for重复结构 2.15 for结构使用举例 2.16 switch多项选择结构 2.17 do/while重复结构 2.18 break和continue语句 2.19 逻辑运算符 2.20 混淆相等(.==)与赋值(=)运算符 ...

    C++大学教程,一本适合初学者的入门教材(part1)

    2.13 计数器控制循环的要点 2.14 for重复结构 2.15 for结构使用举例 2.16 switch多项选择结构 2.17 do/while重复结构 2.18 break和continue语句 2.19 逻辑运算符 2.20 混淆相等(.==)与赋值(=)运算符 ...

    c语言时间片

    &lt;br&gt;(3)按照进程到达的先后顺序排成一个循环队列。再设一个队首指针指向第一个到达进程的首址。 &lt;br&gt;(4)执行处理机调度时,开始选择队首的第一个进程运行。另外再设一个当前运行进程指针,指向当前正在...

    详解Python的Twisted框架中reactor事件管理器的用法

    因此我们将这样的异步模式称为Reactor模式,例如在iOS开发中的Run Loop概念,实际上非常类似于Reactor loop,主线程的Run Loop监听屏幕UI事件,一旦发生UI事件则执行对应的事件处理代码,还可以通过GCD等方式产生...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    IOS 由苹果公司开发的移动操作系统 Webkit 一个开源的浏览器引擎,在手机上的应用十分广泛 Webview WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页 Activity ...

    C++大学教程

    2.13 计数器循环的要点-------------------------------------------------60 2.14 for重复结构------------------------------------------------------62 2.15 for结构使用举例-----------------------------...

Global site tag (gtag.js) - Google Analytics