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

/链队列
//链队列的类型结构定义
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);                        
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值