数据结构ppt3.ppt
《数据结构ppt3.ppt》由会员分享,可在线阅读,更多相关《数据结构ppt3.ppt(66页珍藏版)》请在第壹文秘上搜索。
1、第第3章章 栈、队列和数组栈、队列和数组n31 栈n32 队列n33 数组n34 栈的应用栈和递归 3.1 栈栈3.1.1 栈的定义和运算栈的定义: 栈是只能在一端进行插入和删除的线性表(运算受限)。由此,栈具有后进先出(LIFO)的特性。a1a2an入栈(插入)出栈(删除)栈顶:插入、删除的一端栈底:栈顶的另一端栈顶元素3.1 栈栈3.1.1 栈的定义和运算栈的基本运算:(1) 初始化栈init_stack(S): 设置栈S为空。(2) 判断栈是否为空stack_empty(S): 若栈S为空返回1(TRUE);否则返回0(FLASE)。(3) 判断栈是否为满stack_full(S): 若
2、栈S为满返回1(TRUE);否则返回0(FLASE)。(4) 取栈顶元素值stack_top(S,x): 若栈S不空,将栈顶元素的值送x中;否则返回出错信息。3.1 栈栈3.1.1 栈的定义和运算栈的基本运算:(5) 入栈push_stack(S,x): 若栈S满,返回出错信息;否则将值为x的元素插入到栈中。(6) 出栈pop_stack(S): 若栈S空,返回出错信息;否则删除栈顶元素。3.1 栈栈3.1.2 顺序栈1、存储结构 以顺序存储方式存储的栈称为顺序栈。 可用数组datamaxsize来存放栈的元素值,并设置一个量top来标识栈顶位置。 类型定义如下:#define maxsize
3、 50typedef struct elementtype datamaxsize; int top; seqstack; /定义了一个栈类型seqstackseqstack s1,*s; /定义了栈变量s1和指向栈类型的指针s3.1 栈栈3.1.2 顺序栈1、存储结构a1a2an 下标: 0 1 n maxsize -1datatopn-1S存储结构示意图如下:3.1 栈栈3.1.2 顺序栈2、基本运算的实现(1)初始化栈 void init_stack(seqstack *S) /S是指针 s -top = -1; /设置栈空(2)判断栈是否为空 int stack_empty(seqst
4、ack S) /S是变量 if(S.top = = -1) return 1; else return 0; 3.1 栈栈3.1.2 顺序栈2、基本运算的实现(3)判断栈是否为满 int stack_full(seqstack S) if(S.top = = maxsize-1) return 1; else return 0; (4)取栈顶元素值 void stack_top(seqstack *S,elementtype *x) if(stack_empty(*S) error(“栈空无元素”); *x = s-datas-top; /栈顶元素由参数带回 3.1 栈栈3.1.2 顺序栈2、
5、基本运算的实现(5)入栈 void push_stack(seqstack *S,elementtype x) if(stack_full(*S) error(“栈满,入栈会溢出”); s-top+ +; s-datas-top = x; (6)出栈 void pop_stack(seqstack *S,elementtype *x) if(stack_empty(*S) error(“栈空,无元素”); *x = s-datas-top; s-top - - ; 3.1 栈栈3.1.3 链栈 采用链表存储的栈为链栈。 可使用不带头结点的单链表结构,链表头指针为栈顶,链表尾为栈底,则对链栈的操
6、作与对单链表的操作相同,只是入栈和出栈操作在表头位置进行。an-1 a2 a1top 显然在链表的头部做栈顶是最方便的,而且没有必要象单链表那样为了运算方便附加一个头结点。 3.1 栈栈3.1.4 栈的应用实例例3.1 读入一个有限大小的整数n,并读入n个整数,然后按输入次序的相反次序输出各元素的值。 分析: 因最后输入的数据要最先输出,所以采用栈结构,可使用顺序栈或链栈。 先逐一输入数据压人堆栈中,再从堆栈中逐一将数据弹出即可。3.1 栈栈3.1.4 栈的应用实例例3.1void read_write() stack S; int n, x; printf(”Please input num
7、 int n”); scanf(“%n”, &n); /输入元素个数 init_stack(S); /初始化栈 for (i=1; inext; / u-next=P; / P=u; / L=P; /原表头指针指示新的表头指针算法如下:3.1 栈栈3.1.4 栈的应用实例例3.3 实现对任意输入的表达式的计算。分析: 表达式以字符串(用#将表达式括起来)的形式输入,需要用两个栈分别存储表达式中的操作数和运算符。 求解时,依次扫描表达式中的各基本符号(运算符、操作数),并根据扫描的内容分别处理。 具体处理如下:3.1 栈栈3.1.4 栈的应用实例例3.3定义运算符栈S和操作数栈O扫描表达式中的基
8、本符号操作数?操作数入栈栈顶运算符0时,重复(1),(2):(1)若 N0,则将N % r 压入栈s中 ,执行2;若N=0,将栈s的内容依次出栈,算法结束。(2)用N / r 代替 N3.1 栈栈3.1.4 栈的应用实例例3.4typedef int elementtype; void conversion(int N,int r) seqstack s; elementtype x; init_stack(&s); while ( N ) pushstack ( &s ,N % r ); N=N / r ; while(stack_empty (& s ) ) popsstack (&s ,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 ppt3