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);
    

    输出如下:

  • 相关阅读:
    洛谷 P1048 采药
    一本通 1267:【例9.11】01背包问题
    一本通 1265:【例9.9】最长公共子序列
    一本通 1282:最大子矩阵
    一本通 1285:最大上升子序列和
    一本通 1284:摘花生
    一本通 1283:登山
    一本通 1264:【例9.8】合唱队形
    洛谷 P1126 机器人搬重物
    洛谷P1522 牛的旅行 Cow Tours
  • 原文地址:https://www.cnblogs.com/xiaofeixiang/p/4562146.html
Copyright © 2011-2022 走看看