顺序(环形)队列—c语言

1.创建队列

2.判空 

3.判断环形队列是否已满

4.入队

5.出队

6.取队列的头元素 

7.销毁


顺序队列数据结构定义

typedef int DataType;
struct seqQueue
{
  int MAXNUM;//最大元素个数
  int front,rear;//队首,队尾
  DataType *element;//用于存放数据元素的连续空间的起始地址
};
typedef struct seqQueue *PseqQueue;

1.创建队列

PseqQueue createNullQueue_seq(int m)
{//m存放的最大元素个数,若m=0,则返回NULL 
  if(m==0){
    return NULL;
  }
  PseqQueue p = (PseqQueue)malloc(sizeof(struct seqQueue));
  p->element = (DataType *)malloc(sizeof(DataType)*m);
  p->MAXNUM = m;
  p->front = 0;
  p->rear = 0;
  return p;
}

2. 判空  

int isNullQueue_seq(PseqQueue Q)
{
  //队列为空,返回1,否则返回0,若队列不存在,则返回-1
  if(Q == NULL){
     return -1;
  }
  return (Q->front == Q->rear)?1:0;
}

3.判断环形队列是否已满

int isFullQueue_seq(PseqQueue Q)
{
  //已满,返回1,否则返回0
  return ((Q->rear+1)%Q->MAXNUM == Q->front)?1:0;
}

4.入队

int enQueue_seq(PseqQueue Q ,DataType x)
{//插入不成功,返回0;插入成功返回1
   if((Q->rear+1)%Q->MAXNUM == Q->front){ //判断是否满
     return 0;
   }
   Q->element[Q->rear] = x;
   Q->rear = (Q->rear+1)%Q->MAXNUM;
   return 1;
}

5.出队

DataType delQueue_seq(PseqQueue Q)
{//出队并返回删除元素,若队列为空,则返回-1
  int a;
  if(Q==NULL || Q->front==Q->rear){
    return -1;
  }else{
    a = Q->element[Q->front];
    Q->front=(Q->front+1)%Q->MAXNUM;
    return a;
  }
}

6.取队列的头元素 

DataType front_seq(PseqQueue Q)
{// 若队列为空,返回-1
    return (Q->front == Q->rear)?-1:Q->element[Q->front];
}

7.销毁

int destroyQueue_seq(PseqQueue Q)
{
    //返回值为销毁的栈中现有数据元素的个数,若待销毁的线性表不存在,则返回0
    if(Q==NULL || Q->front==Q->rear){
      return 0;
    }
    int a;//现有数据元素的个数
    a = (Q->rear-Q->front+Q->MAXNUM)%Q->MAXNUM;
  
    Q->MAXNUM = 0;
    Q->front = 0;
    Q->rear = 0;
    free(Q->element);
    free(Q);
    return a;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值