栈是一种后先进后出(FILO)的线性数据结构。只能在栈顶执行增删,栈底保持不动。函数栈、括号校验都是栈的典型场景,本文讲解栈的概念、接口以及顺序栈、链式栈两种实现方式。 1. 顺序栈 它是像数组一样,以顺序存储结构来实现的栈。涉及到的算法有创建栈,入栈,出栈,获取栈顶元素,获取栈容量,栈的大小,销毁。 ①创建栈 先创建栈的结构,再创建出栈的空间,给栈顶指针初始化为-1,表示此时栈是空的,栈容量初始化。 ②入栈 先判断栈是否满,如果没有满的话,让栈顶指针先动,随后再填充数据;如果栈满了则直接返回。 ③出栈 开始先判断栈是否是空的,若为空则直接返回;若不空则获取栈顶元素,随后让栈指针指到下一个栈顶元素。 ④获取栈顶元素 直接返回此时栈顶指针所指的元素的地址 ⑤栈的大小(栈中有效数据个数) 就是为栈顶指针+1 ⑥销毁 既要释放栈的结构,也要释放栈的空间,别忘了释放后设置为NULL,防止悬空指针。 2. 链式栈 其实本质上还是和单链表的操作类似,只是会收到一点限制,比如要规定哪边是栈顶,因为只有栈顶才可以进行入栈和出栈的操作。 涉及到的基本操作,和顺序表一样,只是在链表中不考虑栈的容量。 入栈和出栈对应着单链表中的头插和头删。其它操作和单链表如出一辙。 ARTICLE DETAIL
日记详情
真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。