线性表的顺序结构,OC语言实现

在高级语言中,借助数组,实现一个顺序表很容易,如果需要自己实现数组的逻辑,那就不太容易了。
这里直接使用现成的数组,来实现一个顺序结构的线性表,思想是有的。数组保证了线性表的顺序。

代码实现

线性表类SqList

SqList.h

#import <Foundation/Foundation.h>

@class Element;

NS_ASSUME_NONNULL_BEGIN

/// 线性表的顺序结构OC语言实现
@interface SqList : NSObject

// 表长
@property (nonatomic, readonly) NSUInteger count;

// 插入元素
- (void)insertElement:(Element *)element atIndex:(NSUInteger)index;
// 删除元素
- (void)removeElementAtIndex:(NSUInteger)index;
// 读取对应的元素
- (Element *)elementAtIndex:(NSUInteger)index;

@end

NS_ASSUME_NONNULL_END

SqList.m

#import "SqList.h"
#import "Element.h"
#import <objc/message.h>

@interface SqList ()

// 存储数据的容器
@property (nonatomic, strong) NSMutableArray *listArray;
// 表长
@property (nonatomic, readwrite) NSUInteger count;

@end

@implementation SqList

#pragma mark - private
- (NSMutableArray *)listArray {
    if (!_listArray) {
        _listArray = [[NSMutableArray alloc] init];
    }
    return _listArray;
}

#pragma mark - public
- (NSUInteger)count {
    return self.listArray.count;
}

- (void)insertElement:(Element *)element atIndex:(NSUInteger)index {
    if (!element) {
        return;
    }
    
    ((void (*)(id, SEL, NSUInteger))objc_msgSend)(element, @selector(setIndex:),index);
    
    [self.listArray insertObject:element atIndex:index];
}
- (void)removeElementAtIndex:(NSUInteger)index {
    [self.listArray removeObjectAtIndex:index];
}
- (Element *)elementAtIndex:(NSUInteger)index {
    if (index >= 0 && index <= self.count) {
        return self.listArray[index];
    }
    return nil;
}

@end

元素类Element

Element.h

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

/// 元素类,该类定义了元素的数据、下标等
@interface Element : NSObject

// 数据
@property (nonatomic) int data;
// 下标
@property (nonatomic, readonly) NSUInteger index;
// 初始化
- (instancetype)initWithData:(int)data;

@end

NS_ASSUME_NONNULL_END

Element.m

#import "Element.h"

@implementation Element

- (instancetype)init {
    return [self initWithData:0];
}
- (instancetype)initWithData:(int)data {
    if (self = [super init]) {
        self.data = data;
    }
    return self;
}

- (void)setIndex:(NSUInteger)index {
    _index = index;
}

@end

测试代码

#import "Element.h"

@implementation Element

- (instancetype)init {
    return [self initWithData:0];
}
- (instancetype)initWithData:(int)data {
    if (self = [super init]) {
        self.data = data;
    }
    return self;
}

- (void)setIndex:(NSUInteger)index {
    _index = index;
}

@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Morris_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值