在结构化存储数据集是常常使用数组即顺序表,但当数据庞大时用数组往往比较繁琐,例如我需要在数组中间添加一个元素进去,则需要移动很多个元素,而且在定义数组大小时,小了会溢出,大了会浪费。
而链表正是代替数组解决了这些问题。
链表可以在O(1)的复杂度下处理删除,添加等问题,而且可以用指针来动态分配存储空间,不会出现空间浪费的情况
例子:
编写一个Stack的用例,从输入中读取一个文本流并使用栈判定其中的括号是否配对完整。
例如:对于[()]{}{[()()]()}程序应该打印true,对于[(])则打印false.
问题分析:
这是一道栈的典型问题,利用栈“先进后出”的特性,在这个[(){}{()}中从左到右遍历,遇到左括号“[”,“(”,“{”就一一放进栈里面,每遇到一个右括号“(”,“[”,“{”就把栈顶的元素取出来对比是否为它的“伴侣”。如果不是直接就是可以“false”。
用链表来建立栈图示:
●—●—●—●
↑ ↑
next 栈顶
添加一个元素
●—●—●—●—●
↑ ↑
原栈顶 栈顶
next
●代表结点,->代表指向结点
代码详解: