zoukankan      html  css  js  c++  java
  • 算法-链表实现队列

    队列和栈是最常用的数据结构,跟栈不同的是栈是先进后出,队列是先进先出,生活中简单的队列的例子比如说排队买票,排队等公交,具体的原理可以参考网上,基本上大同小异,本文简单的实现一下队列的入列,出列和删除的操作,跟栈一样,队列是通过Node关联操作,具体实现如下:

    Node定义:

    @interface Node : NSObject
    
    @property  (strong,nonatomic)  NSString  *value;
    
    @property  (strong,nonatomic)  Node  *next;
    
    @end
    

    Queue.h文件:

    @interface Queue : NSObject
    
    //最先入列的元素
    @property  (strong,nonatomic) Node  *first;
    
    //最后入列的元素
    @property  (strong,nonatomic)  Node  *last;
    
    @property  (assign,nonatomic) NSInteger  count;
    
    -(BOOL)isEmpty;
    
    -(NSInteger)size;
    
    -(void)enqueue:(NSString *)value;
    
    -(NSString *)dequeue;
    
    -(void)remove:(NSString *)value;
    
    @end
    

    Queue.m代码:

    @implementation Queue
    
    -(BOOL)isEmpty{
        return self.count==0;
    }
    
    
    -(NSInteger)size{
        return self.count;
    }
    -(void)enqueue:(NSString *)value{
        Node  *oldLast=self.last;
        self.last=[[Node alloc]init];
        self.last.value=value;
        self.last.next=NULL;
        oldLast.next=self.last;
        if ([self isEmpty]) {
            self.first=self.last;
        }else{
            oldLast.next=self.last;
        }
        self.count=self.count+1;
    }
    
    -(NSString *)dequeue{
        if ([self isEmpty]) {
            return [NSString stringWithFormat:@"-1"];
        }
        NSString  *result=self.first.value;
        self.first=self.first.next;
        self.count=self.count-1;
        return result;
    }
    
    -(void)remove:(NSString *)value{
        //判断是不是头部节点
        if ([self.first.value isEqualToString:value]) {
            self.first=self.first.next;
            self.count=self.count-1;
        }else{
            Node  *node=self.first;
            while (node!=NULL) {
                if ([node.next.value isEqualToString:value]) {
                    node.next=node.next.next;
                    self.count=self.count-1;
                    break;
                }
                node=node.next;
            }
        }
    }
    @end
    

     调用如下:

            Queue  *queue=[[Queue alloc]init];
            [queue enqueue:@"iOS技术交流群:228407086"];
            [queue enqueue:@"FlyElephant"];
            [queue enqueue:@"博客园"];
            [queue enqueue:@"keso"];
            [queue remove:@"keso"];
            NSLog(@"出队列:%@",queue.dequeue);
            NSLog(@"出队列:%@",queue.dequeue);
            NSLog(@"出队列:%@",queue.dequeue);
            NSLog(@"出队列:%@",queue.dequeue);
    

    输出如下:

  • 相关阅读:
    JS实现双击内容变为可编辑状态
    DataTables 1.10.x与1.9.x参数名对照表
    div里 datapicker显示异常的情况之一
    javascript 添加行,删除行,datepicker获取当前日期和上一个月日期并设置格式,笔记
    jQuery 实现添加表格行,删除行,调用日期控件
    c# webbrowser控件内核版本强制修改
    【.net】获取网页CDM的下载链接的地址
    MySQL 密码增强插件
    跟我一起学extjs5(42--单个模块的数据新增方式)
    给 Android 开发人员的 RxJava 具体解释
  • 原文地址:https://www.cnblogs.com/xiaofeixiang/p/4562146.html
Copyright © 2011-2022 走看看