[教育]第3章 栈和队列.pptVIP

  • 6
  • 0
  • 约1.32万字
  • 约 51页
  • 2018-02-15 发布于浙江
  • 举报
[教育]第3章 栈和队列

如同排队购物、操作系统中的作业排队,先进入队列的成员总是先离开队列。队列亦称作先进先出(First In First Out)的线性表,简称FIFO表。   在空队列中依次加入元素a1,a2,…an之后,a1是队头元素,an是队尾元素。显然退出队列的次序也只能是a1,a2,…an ,也就是说队列的修改是依先进先出的原则进行的。 队列的特点 先进先出(FIFO)。 双端队列 a1 a2 a3…………………….an 端1 端2 入队 出队 入队 出队 队列的表示和实现 链队列 链队列的类型定义如下: typedef struct queuenode{ QElemType data; struct queuenode *next; } QueueNode,*QueuePtr; 1、定义 头结点 ^ …... front 队头 队尾 rear 设队首、队尾指针front和rear, front指向头结点,rear指向队尾 void InitQueue(LinkQueue Q) { Q.front=Q.rear=(queuenode*)malloc(sizeof(queuenode )); Q.front-next=Q.rear-next=NULL; } front rear 空队 ^ 2、基本操作 int QueueEmpty(LinkQueue Q) { return (Q.front-next= =NULL Q.rear-next= =NULL); } 构造一个空队列 队列的判空 void EnQueue(LinkQueue Q,ElemType e) { QueueNode *p; p=(QueueNode * )malloc(sizeof(QueueNode)); p–data=x; p–next=NULL; Q.rear–next=p; Q.rear=p; } null front rear x null p 入队操作 Status DeQueue(LinkQueue Q,ElenType e) { QueueNode *p; if(QueueEmpty(Q)) return ERROR; p=Q.front-next; e=p–data; Q.front-next=p–next; if(Q.rear = =p) Q.rear=Q.front; free(p); return OK; } null rear x null front p 存储池 出队操作 顺序队列 2、简单实现 用一维数组实现sq[M]。 1、定义 队列的顺序存储结构称为顺序队列 顺序队列的类型定义如下: #define MAXQSIZE 100 typedef struc{ ElemType data[MAXQSIZE]; int front; int rear; } SqQueue; front=-1 rear=-1 1 2 3 4 5 0 队空 1 2 3 4 5 0 front J1,J1,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 4 5 0 J1,J2,J3出队 J1 J2 J3 front fro

文档评论(0)

1亿VIP精品文档

相关文档