队列

顺序存储结构队列


#include<stdio.h>

#define MAXSIZE 100
#define SIZE sizeof(queue)

typedef struct{
  int data[MAXSIZE];
  int rear,front;
}queue;

queue *initQueue();
int inQueue(queue *head, int d);
int outQueue(queue *head, int *d);
int frontQueue(queue *head, int *d);
int emptyQueue(queue *head);

int main(){
  queue *p = initQueue();
  inQueue(p,1);
  inQueue(p,2);
  inQueue(p,3);

  while (!emptyQueue(p)) {
    int a,b;
    frontQueue(p,&a);
    outQueue(p,&b);
    printf("front=%d, out=%d\n", a, b);
  }
  return 0;
}

//队列初始化
queue *initQueue() {
  queue *p = (queue*)malloc(SIZE);
  p->rear = -1;
  p->front = -1;
  return p;
}
//入队
int inQueue(queue *head, int d){
  if(head->rear == MAXSIZE-1)
    return 0;
  head->data[++head->rear] = d;
  if(emptyQueue(head))
    head->front++;
  return 1;
}
//出队
int outQueue(queue *head, int *d){
  if(emptyQueue(head))
    return 0;
  //队列为空时初始化
  if (head->front == head->rear) {
    *d = head->data[head->front];
    head->front = -1;
    head->rear = -1;
  }else{
    *d = head->data[head->front++];
  }
  return 1;
}
//读队头
int frontQueue(queue *head, int *d){
  if(emptyQueue(head))
    return 0;
  *d = head->data[head->front];
  return 1;
}
//队判空
int emptyQueue(queue *head){
  if (head->front == -1)
    return 1;
  return 0;
}

循环队列


#include<stdio.h>
#define MAXSIZE 100
#define SIZE sizeof(CSeQueue)
typedef struct {
  int data[MAXSIZE];
  int front;
  int rear;
}CSeQueue;

CSeQueue *initSeQueue();
int inSeQueue(CSeQueue *q, int x);
int outSeQueue(CSeQueue *q, int *x);
int frontScQueue(CSeQueue *q, int *x);
int emptySeQueue(CSeQueue *q);

int main(){

}

//初始化
CSeQueue *initSeQueue(){
  CSeQueue *q = (CSeQueue*)malloc(SIZE);
  q->front = q->rear = MAXSIZE-1;
  return q;
}
//入队
int inSeQueue(CSeQueue *q, int x){
  if ((q->rear+1) % MAXSIZE == q->front)
    return 0;
  q->rear = (q->rear+1) % MAXSIZE;
  q->data[q->rear] = x;
  return 1;
}
//出队
int outSeQueue(CSeQueue *q, int *x){
  if (emptySeQueue(q))
    return 0;
  q->front = (q->front+1) % MAXSIZE;
  *x = q->data[q->front];
}
//读队头
int frontScQueue(CSeQueue *q, int *x){
  if (emptySeQueue(q))
    return 0;
  int t = (q->front+1) % MAXSIZE;
  *x = q->data[t];
  return 1;
}
//判空
int emptySeQueue(CSeQueue *q){
  if(q->front == q->rear)
    return 1;
  return 0;
}

链队列


#include<stdio.h>

typedef struct node {
  int data;
  struct node *next;
}QNode;
typedef struct {
  QNode *front;
  QNode *reat;
}LQueue;

LQueue *init_lQueue();
int inLQueue(LQueue *q, int x);
int outLQueue(LQueue* q, int *x);
int emptyLQueue(LQueue *q);
int frontLQueue(LQueue *q, int *x);



//链队列初始化
LQueue *init_lQueue(){
  LQueue *q;
  QNode *p;
  q = (LQueue*)malloc(sizeof(LQueue));
  p = (QNode*)malloc(sizeof(QNode));
  p->next = NULL;
  q->front = q->rear = p;
  return q;
}
//链队列入队
int inLQueue(LQueue *q, int x){
  QNode *p;
  if(p = (QNode*)malloc(sizeof(QNode)) == NULL)
    return 0;
  p->data = x;
  p->next = NULL;
  q->reat->next = p;
  q->rear = p;
  return 1;
}
//链队列出队
int outLQueue(LQueue* q, int *x){
  QNode *p;
  if(emptyLQueue(q))
    return 0;
  p = q->front->next;
  q->front->next = p->next;
  *x = p->data;
  free(p);
  //出队后为空时,队列初始化
  if(q->front->next == NULL)
    q->rear = q->front;
  return 1;
}
//读队头
int frontLQueue(LQueue *q, int *x){
  if(emptyLQueue(q))
    return 0;
  *x = q->front->next->data;
  return 1;
}
//判空
int emptyLQueue(LQueue *q){
  if (q->front == q->rear)
    return 1;
  return 0;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 栈 栈的英文单词是Stack,它代表一种特殊的线性表,这种线性表只能在固定一端(通常认为是线性表的尾端)进行插入,...
    Jack921阅读 5,438评论 0 5
  • GCD调度队列是执行任务的强大工具。调度队列允许您相对于调度者异步或者同步的执行任意代码块。您能够使用调度队列来执...
    坤坤同学阅读 11,652评论 1 3
  • 我们在使用手机的时候,偶尔都会碰到过卡住的时候,比如一个地方怎么点都没有用,屏幕也卡住不显示其他东西,但当你把卡住...
    Originalee阅读 4,073评论 0 10
  • 1.栈 1.1.栈的定义 栈(stack)是限定仅在表尾(栈顶 top)进行插入和删除操作的后进先出的线性表。 p...
    JonyFang阅读 5,341评论 0 21
  • 转载请注明出处:http://www.jianshu.com/p/462b42344098 上一篇《数据结构与算法...
    Alent阅读 6,607评论 3 15

友情链接更多精彩内容