队列(c语言)

队列:

限定所有的插入操作在表的一端进行,而 删除操作在表的另一端进行的线性表。

允许进行插入操作的一端称为队尾 (rear),

允许进行删除操作的一端称为队头(front)

 

1.队列类型的定义

#define MAX 50
typedef struct
{
    ElemType data[MAX];
    int front,rear;//front为队首指针  rear为队尾指针
}SqQueue;
   typedef int ElemType;
   typedef SqQueue CSqQueue;

2.初始化运算

/*初始化运算得到一个空队列*/
int InitQueue(CSqQueue *Q)
{
   (*Q).front=0;
   (*Q).rear=0;
   return 0;
}

3.判空运算的实现

/*判断运算,队列Q为空返回1,否则返回0*/
int QueueEmpty(CSqQueue Q)
{
   if(Q.front==Q.rear)
       return 1;
   return 0;
}

4.判满运算的实现

int QueueFull(CSqQueue Q)
{
    if((Q.rear+1)%MAX==q.front)
       return 1;
    return 0;
}

5.创建运算的实现

/*创建一个队列,创建成功返回1,创建失败返回0*/
int CreatQueue(CSqQueue *Q)
{
   int i,n;
   ElemType temp_e;
   printf("Please input the length of the queue which you want to creat:\n");
   scanf("%d",&n);
   if(n>MAX)
      return -1;
   for(i=1;i<=n,i++){
      printf("Please input NO.%d enter element:\n",i); 
      scanf("%d",&temp_e);
      EnQueue(Q,temp_e); 
  }
  return 0;
}

6.求长度运算的实现

/*返回队列长度*/
int QueueLength(CSqQueue Q)
{
   return (Q.rear-Q.front+MAX)%MAX;
}

7.访问队首运算的实现

/*返回队首元素的值*/
int GetHead(CSQqueue Q,ElemType *e)
{
   if(QueueEmpty(Q))
   {
      return-1;
   }
   *e=Q.data[Q.front];
   return 0;
}

8.入队的实现

/*队尾插入新元素*/
int EnQueue(CSqQueue *Q,ElemType *e)
{
   if(QueueEmpty(*Q))
   {
      return-1;
   }
   (*Q).data[(*Q).rear]=e;
   (*Q).rear=((*Q).rear+1)%MAX;
   return 0;
}

9.出队的实现

/*删除队首,并用变量e返回被删除元素*/
int DeQueue(CSqQueue *Q,ElemType *e)
{
   if(QueueEmpty(*Q))
   {
      return-1;
   }
   e=(*Q).data[(*Q).front)];
   (*Q).front=((*Q).front+1)%MAX;
   return 0;
}

10.打印运算的实现

/*输出队列Q*/
void ShowQueue(CSqQueue Q)
{
   ElemType temp_e;
   while (!=QueueEmpty(Q))
   {
       DeQueue(&Q,&temp_e);
       printf("%d",temp_e)
   }
   printf("\n");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值