算法-链表实现栈

简介:

链表是一种递归的数据结构,它或者为空(null),或者只想一个节点(node)的引用,改节点包含了一个对象和执行另外一条链表的引用,节点可能是包含任意数据数据的抽象尸体,包含的只想节点的应用显示了它在链表之中的作用。相比数组来说有更多的灵活性, 本文就简单的用链表实现一下栈,栈的最大的特点就是后进先出,队列是先进先出,两者不太一样,本文将简单的用OC实现栈。

Node定义:

1
2
3
4
5
6
7
@interface  Node :  NSObject
 
@property   (strong, nonatomic )   NSString   *value;
 
@property   (strong, nonatomic )  Node  *next;
 
@end

 Stack头文件定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@interface  Stack :  NSObject
//栈顶的元素
@property   (strong, nonatomic ) Node  *first;
 
@property   (assign, nonatomic NSInteger   count;
 
-( BOOL )isEmpty;
 
-( NSInteger )size;
 
-( void )push:( NSString  *)value;
 
-( NSString  *)pop;
 
-( void )remove:( NSString  *)value;
 
@end

其中有三个主要的实现方法,入栈(push),出栈(pop),删除(remove),需要注意的是本文中的删除是单向链表的删除,如果删除最后一个,时间复杂度和链表的长度有关系,我们可以采用双向链表,有兴趣的可以研究一下。

Stack.m的实现代码:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
@implementation  Stack
 
-( BOOL )isEmpty{
     return  self .count==0;
}
 
-( NSInteger )size{
     return  self .count;
}
 
-( void )push:( NSString  *)value{
     Node  *oldFirst= self .first;
     self .first=[[Node alloc]init];
     self .first.value=value;
     self .first.next=oldFirst;
     self .count= self .count+1;
}
 
-( NSString  *)pop{
     if  (! self .first) {
         return  [ NSString  stringWithFormat:@ "-1" ];
     }
     NSString  *value= self .first.value;
     self .first= self .first.next;
     self .count= self .count-1;
     return  value;
}
 
-( 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.next) {
             if  ([node.next.value isEqualToString:value]){
                 if  (node.next.next) {
                     Node *tempNode=node.next.next;
                     node.next=tempNode;
                 } else {
                     node.next= NULL ;
                 }
                 self .count= self .count-1;
                 break ;
             } else {
                 node=node.next;
             }
            
         }
     }
}
 
@end

 

测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
Stack  *stack=[[Stack alloc]init];
Node *first=[[Node alloc]init];
first.value=@ "iOS技术交流群:228407086" ;
first.next= NULL ;
stack.first=first;
[stack push:@ "FlyElephant" ];
[stack push:@ "博客园" ];
[stack push:@ "keso" ];
[stack remove:@ "FlyElephant" ];
NSLog (@ "出栈:%@" ,stack.pop);
NSLog (@ "出栈:%@" ,stack.pop);
NSLog (@ "出栈:%@" ,stack.pop);
NSLog (@ "出栈:%@" ,stack.pop);

效果如下:

本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4558408.html,如需转载请自行联系原作者

相关文章
|
存储 机器学习/深度学习 算法
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
604 30
|
存储 算法 C语言
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
877 25
|
存储 监控 算法
员工电脑监控系统中的 C# 链表算法剖析-如何监控员工的电脑
当代企业管理体系中,员工电脑监控已成为一个具有重要研究价值与实践意义的关键议题。随着数字化办公模式的广泛普及,企业亟需确保员工对公司资源的合理利用,维护网络安全环境,并提升整体工作效率。有效的电脑监控手段对于企业实现这些目标具有不可忽视的作用,而这一过程离不开精妙的数据结构与算法作为技术支撑。本文旨在深入探究链表(Linked List)这一经典数据结构在员工电脑监控场景中的具体应用,并通过 C# 编程语言给出详尽的代码实现与解析。
280 5
|
存储 算法 物联网
解析局域网内控制电脑机制:基于 Go 语言链表算法的隐秘通信技术探究
数字化办公与物联网蓬勃发展的时代背景下,局域网内计算机控制已成为提升工作效率、达成设备协同管理的重要途径。无论是企业远程办公时的设备统一调度,还是智能家居系统中多设备间的联动控制,高效的数据传输与管理机制均构成实现局域网内计算机控制功能的核心要素。本文将深入探究 Go 语言中的链表数据结构,剖析其在局域网内计算机控制过程中,如何达成数据的有序存储与高效传输,并通过完整的 Go 语言代码示例展示其应用流程。
277 0
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
321 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
【算法】栈
栈相关算法题,供参考,附有链接地址及板书
227 14
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
1327 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
579 5
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法

热门文章

最新文章