随笔 - 741  文章 - 0  评论 - 260  阅读 - 416万

线性表--队列

和栈相反,队列是一种先进先出(first in first out 缩写为FIFO)的线性表。它只允许在表的一端进行插入,而在另一端删除元素。

双端队列:限定插入和删除操作在表的两端进行的线性表

 

-----单链队列 队列的链式存储表示------ 

和线性表类似,队列也可以有两种存储表示。用链表表示的队列简称链队列。

typedef struct QNode {

 QElemType data;

 struct QNode * next;

}QNode ,QueuePtr;

typedef struct {

 Queueptr front; //队头指针

 Queueptr rear; //队尾指针

}LinkQueue;

 

status InitQueue(LinkQueue & q)

{ //构造一个带头结点的空队列

  q.front = q.rear = (Queueptr) malloc ( sizeof(QNode));

  if(!q.front) exit;

  q.front->next = NULL;

  return ok;

}

 

status DestroyQueue(LinkQueue & q)

{

  while(q.front)

  {

    q.rear= q.front->next;

    free(q.front);

    q.front = q.rear;

  }

  return ok;
}

status EnQueue(LinkQueue & q, QElemType e)

{

  p = (Queueptr) malloc(sizeof(QNode));

  if(!p) exit;

  p->data = e; p->next = NULL;

  q->rear ->next  = p;

  q->rear = p;

  return ok;
}

status DeQueue(LinkQueue & q,QElemType &e)

{

  if(q.front == q.rear) return ERROR;

  p = q.front->next;

  e = q.data;

  q.front ->next =p->next;

  if(q.rear == p) q.rear= q.front;

  free(p);

  return ok;

}

-----循环队列 队列的顺序存储表示------

status InitQueue(SqSqueue & q) {

  q.base = (QElemType*)malloc(MAXQSIZE * sizeof(QElemType));

  if(!q.base) exit;

  q.front = q.rear = 0;

  return ok;

}

 int QueueLength(SqSqueue & q) {

  return (q.rear-q.front+MAXQSIZE)%MAXQSIZE;

}

status EnQueue(SqSqueue & q,QElemType e) {

  if((q.rear+1)%MAXQSIZE == q.front) return ERROR;

  q.base[q.rear]  = e;

  q.rear = (q.rear+1)%MAXQSIZE;

  return ok;

}

status DeQueue(SqSqueue & q,QElemType &e) {

  if(q.front == q.rear) return ERROR;

  e = q.base[q.front];

  q.front = (q.front+1) % MAXQSIZE;

  return ok;

}

 

posted on   莫水千流  阅读(993)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2012-06-11 file operation
2012-06-11 选择目录对话框和选择文件对话框
< 2013年6月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6

点击右上角即可分享
微信分享提示