- 2
- 0
- 约1.45万字
- 约 67页
- 2016-11-06 发布于湖北
- 举报
入队 int Inqueue(SeqQueue *Q, QueueElementType x) { if ((Q-rear+1)% MaxSize==Q-front) return(false); /*检查是否队满*/ Q-rear= (Q-rear+1)% MaxSize; Q-elem[Q-rear] =x; return(true); } * 3)出队 int Outqueue(SeqQueue *Q, QueueElementType *x) { if (Q-rear==Q-front) return(false); /*检查是否队空*/ Q-front= (Q-front+1)% MaxSize; *x= Q-elem[Q-front]; return(true); } * 队满条件: rear = = front tag= = 1 队空条件: rear = = front tag = = 0 解决方法2:设置一个标志位 假设标志位tag,初值=0 当队满时成功,tag=1; 当队空时成功,tag=0; * 5. 队列的应用 火车调度; 操作系统中的各种数据缓冲区的先进先出管理; 应用系统中的各种事件排队管理 * 作业 P71-72 一、二 5,8 * 第二次上机 目的:熟悉栈和队列的各项操作 内容: 1. 实现栈和队列的基本操作; 2. 回文序列判断P72 二 2; 3. 舞伴问题 P46。 4. (选作)马踏棋盘 要求: 利用栈和队列的基本操作完成。 * int Pushi(LinkStack top[M], int i, StackElementType x) { LinkStackNode * temp; temp=(LinkStackNode * ) malloc(sizeof(LinkStackNode)); if(temp==NULL) return(FALSE); temp-data=x; temp-next=top[i]-next; top[i]-next=temp; return(TRUE); } 第i号栈的进栈操作 * int Popi(LinkStack top[M], int i, StackElementType *x) { LinkStackNode * temp; temp=top[i]-next; if(temp==NULL) return(FALSE); top[i]-next=temp-next; *x=temp-data; free(temp); return(TRUE); } 第i号栈的出栈操作 * 例1、 数制转换 算法基于原理: N = (N div d)×d + N mod d 计算顺序 输出顺序 例如:(1348)10 = (2504)8 , 其运算过程如下: N N div 8 N mod 8 1348 168 4 168 21 0 21 2 5 2 0 2 * 3.1.3 栈的应用举例 数制转换算法 void Conversion(int N) /*对任意非负十进制数N,打印等值的八进制数*/ { Stack S; int x; /*S为顺序栈或链栈*/ InitStack(S); while(N0) { x=N%8; Push(S, x); N=N/8; } while(!IsEmpty(S)) { Pop(S,x); printf(“%d”,x); } } * 问题分析: Exp = a ? b + (c ? d / e) ? f 1)确定计算规则,即明确运算符的优先级; 2)确定当前处理字符是运算符还是操作数; 表达式 ::= (操作数) + (运算符) + (操作数) 操作数 ::= 简单变量 | 表达式 简单变量 :: = 标识符 | 无符号整数 3)每个运算符的运算次序要由它之后的一个运算符来定。 例3、表达式求值(限于
原创力文档

文档评论(0)