数据结构—栈和队列-公开课件.pptVIP

  • 2
  • 0
  • 约8.22千字
  • 约 42页
  • 2019-06-03 发布于广西
  • 举报
例 递归的执行情况分析 递归过程及其实现 递归:函数直接或间接的调用自身叫递归 实现:建立递归工作栈 #include stdio.h void print ( int w ) { int i ; if ( w != 0 ) { print ( w - 1); for ( i = 1; i = w ; ++ i ) printf ( “ % 3 d , ” , w ) ; printf ( “ \ n ” ) ; }} void main ( ) {int val; val =3; print (val );} 运行结果: 1, 2,2, 3,3,3, 递归调用执行情况如下: 主程序 (1) print(w) w=3; 3 print(2); (1)w=3 top (2) 输出:3, 3, 3 w 2 print(1); (2)w=2 (1)w=3 top (3) 输出:2, 2 w 1 print(0); (3)w=1 (2)w=2 (1)w=3 top (4)输出:1 w 0 (4)w=0 (3)w=1 (2)w=2 (1)w=3 top w (3) 输出:2, 2 (2) 2 (1) 3 top (4)输出:1 (3) 1 (2) 2 (1) 3 top (2) 输出:3, 3, 3 (1 ) 3 top 返回 (3) 1 (2) 2 (1) 3 top (4) 0 结束 (1) 3.3 队列 队列的定义及特点 定义:队列是限定只能在表的一端进行插入,在表的另一端进行删除的线性表 队尾(rear)——允许插入的一端 队头(front)——允许删除的一端 队列特点:先进先出 ( FIFO ) a1 a2 a3…………………….an 入队 出队 front rear 队列Q=(a1,a2,……,an) 双端队列 a1 a2 a3…………………….an 端1 端2 入队 出队 出队 入队 链队列 结点定义 typedef struct node { int data; struct node *link; }JD; 头结点 ^ …... front 队头 队尾 rear 设队首、队尾指针front和rear, front指向头结点,rear指向队尾 front rear x入队 ^ x front rear y入队 x ^ y front rear x出队 x ^ y front rear 空队 ^ front rear y出队 ^ 入队算法 出队算法 JD *ldcr ( JD *rear , int x ) { JD *p; p = ( JD *) malloc ( sizeof ( JD )); p - data = x; p - link = NULL; rear - link = p; rear = p; return ( p ); } int ldsc ( JD *front , JD *rear ) { JD *s; int x; if ( front = = rear ) return ( - 1 ); s = front - link; front - link = s - link; if ( s - link = = NULL) rear = front; x = s - data; free ( s ); return ( x ); } 队列的顺序存储结构 实现:用一维数组实现sq[M] front=-1 rear=-1 1 2 3 4 5 0 队空 1 2 3 4 5 0 front J1,J2,J3入队 J1 J2 J3 rear rear 1 2 3 4 5 0 J4,J5,J6入队 J4 J5 J6 front 设两个指针front,rear,约定: rear指示队尾元素; front指示队头元素前一位置 初值front=rear=-1 空队列条件:front==rear 入队列:sq[++rear]=x; 出队列:x=sq[++front]; rear rear front rear 1 2 3

文档评论(0)

1亿VIP精品文档

相关文档