【栈】
1.什么是栈
有始有终,所以我准备把各种数据结构都讲一次,栈也分顺序存储和链式储存,这里我们选择顺序存储来讲
作为数据结构中最简单的栈,这里不会说太多,首先考虑一下下面的model:
这就是一个栈,相信你或多或少也了解一些栈的知识,当然如果不了解或者不知道你涉及过那还是继续看吧
栈数据结构是后进先出(Last In First Out,简称LIFO),何谓后进先出?你可以把栈视作一个有下底的盒子,然后你把各种书放进去,如果你想拿书,你拿到的第一步一定是你最后放进去的,这就是栈
栈是一种只能在一端进行插入或者删除操作的线性表(说明栈还是线性表结构,只是操作受限而已)。其中允许进行插入或者删除操作的一端称为栈顶。栈的插入和删除一般叫入栈和出栈。栈的顺序存储结构叫做顺序栈,栈的链式存储结构叫做链栈。
2.栈的特点
栈的特点是后进先出。老师都喜欢举那个将盘子压入箱子的例子来解释栈的特点。举个例子:很多车开进死胡同,先进去的必须得等之前所有的车全出去才可以出去,所以第一个进去的车最后一个出来。最后进去的车第一个出来,所以这个就类似于栈,先进后出。
3.栈基本操作
bool is_full(): 判断堆栈 S 是否已满;void push(element_type item): 将元素item压入堆栈;bool is_empty(): 判断堆栈S是否为空;element_type pop(stack s): 删除并返回栈顶元素;
C 语言: 实现顺序栈,使用数组来实现,只能存储int数据(stack)。
#include <stdio.h> /** * C 语言: 实现顺序栈,使用数组来实现,只能存储int数据(stack)。 * * @author llz * @date 2018/7/02 */ //Sequence Stack int stack[500]; //栈顶下标 int top; void init() { top=-1; } //判断栈是否为空 bool Empty() { if(top==-1) { return true; } else { return false; } } //判断栈是否已满了 bool full() { if(top==500-1) { return true; } else { return false; } } //入栈 void Push(int element) { if(!full()) { top++; stack[top]=element; } else { printf("栈满\n"); } } //出栈 void Pop() { if(!Empty()) { top--; } else { printf("栈空\n"); } } //取栈顶元素 int getTop() { if(!Empty()) { return stack[top]; } else { printf("栈空\n"); } } int main() { int i=0; //初始化栈 printf("\n###########init###########\n"); init(); printf("----------------------------------"); //入栈操作 printf("\n###########push(0~10))###########\n"); for(i=0;i<=10;i++) { Push(i); } printf("----------------------------------"); printf("\n###########gettop###########\n"); printf("%d\n",getTop()); printf("----------------------------------"); //出栈操作 printf("\n###########pop###########\n"); Pop(); printf("----------------------------------"); printf("\n###########gettop###########\n"); printf("%d\n",getTop()); printf("----------------------------------"); printf("\n###########push(12)###########\n"); Push(12); printf("%d\n",getTop()); }
4.栈练习
第1题
设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6一次通过栈S,一个元素出栈后即进队列Q,若6个元素出栈的序列是e2,e4,e3,e6,e5,e1则栈的S的容量之多应该是()
A. 6 B. 4 C. 3 D. 2
第2题
若已知一个栈的入栈顺序是1、2、3、4.其出栈序列为P1、P2、P3、P4、,则P2、P4不可能是()
A. 2、4 B. 2、 1 C. 4 、 3 D. 3 、 4
第3题
一个栈的入栈序列为A B C D E 则不可能的输出序列为(C)
1. EDCBA
2. DECBA
3. DCEAB
4. ABCDE

浙公网安备 33010602011771号