03-栈队列.pptVIP

  • 30
  • 0
  • 约1.78万字
  • 约 66页
  • 2016-04-08 发布于湖北
  • 举报
03-栈队列.ppt

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * elem[0] elem[1] … … elem … … … … … … elem[MAXLENG-1] front rear 队列Q的存储结构示意图 4.顺序队列算法举例 定义队列的C类型 #define MAXLENG 100 Typedef struct { ElemType elem[MAXLENG]; int front,rear; } SeQueue; //定义结构变量Q表示队列 SeQueue Q; * (1)进队算法: 假设用Q表示顺序队列,头指针front指向队头元素,rear指向尾元素的后一个空位,, e为进队元素。 int En_Queue( SeQueue Q,Elemtype e) { if ((Q.rear+1)% MAXLENG==Q.front) //若Q已满,退出 return ERROR; Q.elem[Q.rear]=e; //装入新元素e Q.rear++; //尾指针后移一个位置 Q.rear = Q.rear % MAXLENG; //为循环队列 return OK; } /// 0 1 2 MAXLENG-1 /// 0 1 2 MAXLENG-1 rear front rear front * x ... y 0 ... MAXLENG-1 rear front y ... z x 0 ... MAXLENG-1 front rear (2)出队算法 int De_Queue(SeQueue Q,Elemtype e) { if (Q.front==Q.rear) //Q为空队列,退出 return ERROR; e=Q.elem[Q.front]; //取走队头元素,送e Q.front=(Q.front+1)% MAXLENG; //循环后移到一个位置 return OK; } * 思 考 题 1。 如何根据front,rear,maxlength求队列的长度。 2。 在循环队列中,如果用front指向队列的第一个元素,length表示元素的个数,如何设计算法。 typedef struct QUEUE{ ElemType elem[MAXLENGTH]; int front,length;} QUEUE; void iniQueue(QUEUE Q); int EnQueue(QUEUE Q,ElemType x); int DeQueue(QUEUE Q,ElemType x); * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 4 0 4 5 0 4 2 5 0 4 (1) 4进栈 (2) 0进栈 (3) 5进栈 (4) 2进栈 3.2 栈的应用举例 栈的基本用途----保存暂时不用的数或存储地址。 3.2.1 数制转换 例. 给定十进制数 N=1348,转换为八进制数 R=2504 1.依次求余数,并送入栈中,直到商为0。 (1) r1=1348%8=4 //求余数 n1=1348/8=168 //求商 (2) r2=168%8=0 //求余数 n2=168/8=21 //求商 (3) r3=21%8=5 //求余数 n3=21/8=2 //求商 (4) r4=2%8=2 //求余数 n4=2/8=0 //求商 2.依次退栈,得R=2504 * ( { ( { { ( { ( (1)“(”进栈 (2)“{”进栈 (3)“{”进栈 (4)“{”退栈 { ( (5)“]”与“{”不匹配 3.2.2 判定表达式中的刮号匹配 1.刮号匹配的表达式 例. {...(...( )...)

文档评论(0)

1亿VIP精品文档

相关文档