数据结构队列

#include <iostream>
#include <assert.h>
using namespace std;
/*
struct Node
{
 int info;
 Node *next;
};

struct queuelk
{
 struct Node *front;
 struct Node *back;
};


void init_queue(struct queuelk* q)
{
 q->back = q->front = NULL;
}

void queue_is_empty(struct queuelk *q)
{
 if(q->front==NULL)
 {
  return;
 }
}

void enqueue(struct queuelk *q, int info)
{
 struct Node *temp = NULL;
 temp = (Node*)malloc(sizeof(Node));
 assert(temp!=NULL);
 if(q->front == NULL)     //这是队列的第一个结点
 {
  q->front = q->back = temp;
  temp->info = info;
  return;
 }
 q->back->next = temp;
 temp->info = info;
 q->back = temp;
}

bool dequeue(struct queuelk *q, int *info)
{
 if(q->front == NULL)
 {
  return false;
 }
 *info = q->front->info;
 if(q->front == q->back)
 {
  free(q->front);
  q->front = q->back = NULL;
  return true;
 }
 q->front = q->front->next;
 return true;
}
*/

//这是个通用队列.

//写一个循环队列.
//

static int arr[100];
static int size = 100;

struct queuelk
{

 int rear;
 int size;
};


void init_queue(struct queuelk *q)
{
 q->front = -1;       //这个-1很重要
 q->rear = -1;
}


bool enqueue(struct queuelk *q, int info)
{  
 if(q->front == 0 && q->rear+1 == 100 || q->rear+1 == q->rear)
 {
   return false;
 }
 q->rear = (q->rear==100)? 0 : ++q->rear;
 if(q->front == -1)         //第一个元素.
 {
   q->front = 0;         //追上了才算是队列满.
 }
  arr[q->rear] = info;       //每次在队尾入队,分析一下用什么条件判断队满..什么条件呢
  return true;
}

bool dequeue(struct queuelk *q, int *info)
{
  if(q->front == -1)
  {
   return false;
  }
  *info = arr[q->front];
  if(q->front == q->rear)
  {
   q->front = q->rear =-1;      //结束标记在哪种数据结构里都很重要..
  }
  else
  {
   q->front = (q->front== 100) ? 0 : ++q->front;
   
  }
  return true;
}

你可能感兴趣的:(数据结构队列)