数据结构 - - 链队列与循环队列

作者在 2010-05-15 22:00:23 发布以下内容
/链队列
//链队列的类型结构定义
typedef LinkList QueuePtr;
typedef struct
{
  QueuePtr front;
  QueuePtr rear;
  int length;        
}Queue;

//构造空队列Q
void InitQueue(Queue &Q)
{
  Q.front=Q.rear=new ListNode;
  if(!Q.front)  exit(1);
  Q.front->next=NULL;
  Q.length=0;      
}

//在队尾插入元素 e
void EnQueue(Queue &Q,DataType e)
{
  s=new ListNode;
  if(!s)  exit(1);
  s->data=e;  s->next=NULL;
  Q.rear->next=s;
  Q,rear=s;
  ++Q.length;     
}

//删除操作
bool DeQueue(Queue &Q,DataType &e)
{
  if(Q.front==Q,rear)
    return FALSE;
   p=Q.front->next;
   e=p->data;
   Q.front->next=p->next;
   if(Q.rear==p) Q.rear=Q.front;
   free(p);
   return TRUE;       
}

循环队列
循环队列的结构*/

#define MAXNUM 20
typedef int DataType;
typedef struct SeqQueue
{
  int f;
  int r;
  DataType q[MAXNUM];        
} SeqQueue,*PSeqQueue;

 /*/构造一个最大储存空间为maxsize的空队列paqu*/
PSeqQueue creatEmptyQueue_seq(void)
{
  PSeqQueue paqu=(PSeqQueue)malloc(sizeof(SeqQueue));
  if(paqu==NULL)
    printf("Out of space!!\n");
  else
  paqu->f=paqu->r=0;
  return (paqu);            
}

/*/判空*/
int isEmptyQueue_seq(PSeqQueue paqu)
{
  return paqu->f==paqu->r;    
}

/*/判满/*/
int isFullQueue_seq(PSeqQueue paqu)
{
  return(paqu->r+1)%MAXNUM==paqu->f;    
}

/*/在队列中插入一元素*/
void enQueue_seq(PSeqQueue paqu,DataType x)
{
  if((paqu->r+1)%MAXNUM==paqu->f)
    printf("Full queue!!\n");
  else
  {
     paqu->q[paqu->r]=x;
     paqu->r=(paqu->r+1)%MAXNUM;    
  }       
}

/*/删除队列头部元素*/
void deQueue_seq(PSeqQueue paqu)
{
  if(paqu->f==paqu->r)
    printf("Empty Queue!!\n");
  else
    {
      paqu->f=(paqu->f+1)%MAXNUM;              
    }       
}

/*/求队列头部元素*/
DataType frontQueue_seq(PSeqQueue paqu)
{
  if(paqu->f==paqu->r)
      return 0;
  else
      return (paqu->q[paqu->f]);         
}

/*/求队列的长度*/
int QueueLength(PSeqQueue paqu)
 {
   return ((paqu->r-paqu->f+MAXNUM)%MAXNUM);                         
 }
默认分类 | 阅读 691 次
文章评论,共0条
游客请输入验证码
浏览10931次
文章分类
最新评论