队列的简单实现

定义顺序存储的循环队列存储结构,并编写循环队列的各种基本操作实现函数

说明:队列的基本操作可包括:

① void InitQueue (Queue &Q);   //构造一个空队列 Q

② int EmptyQueue (Queue Q);  

//判断队列Q是否为空,若空返回1,否则返回0

③ void EnQueue (Queue &Q, ElemType item);   //元素 item 进队列Q

④ ElemType OutQueue (Queue &Q);  //队头元素出队列Q,并返回其值                       

⑤ ElemType PeekQueue (Queue Q);  //返回队头元素值   

⑥ void ClearQueue (Queue &Q);    //清空队列
代码如下:

#include<stdio.h>
#include<malloc.h>
#include<process.h>
#include<math.h>
#define maxsize 10
typedef int elemtype;
typedef struct
{
 elemtype *base;
 int front;
 int rear;

}sqqueue;


void initqueue(sqqueue &q)              //顺序循环队列的初始化
{
 q.base=(elemtype *)malloc(maxsize*sizeof(elemtype));
 if(!q.base)exit(0);          
 q.front=q.rear=0;                                    
}


void insertqueue(sqqueue &q,elemtype e)                //队列插入元素
{
 if((q.rear+1)%maxsize==q.front){printf("元素已满!");exit(0);}  
 q.base[q.rear]=e;
 q.rear=(q.rear+1)%maxsize;                                           
}


int lengthqueue(sqqueue &q)                          //求队列的长度
{
 return (q.rear-q.front+maxsize)%maxsize;                    
}

void deletqueue(sqqueue &q,int i)         //删除某元素
{
 if(q.front==q.rear){printf("队列为空!");exit(0);}
 for(int j=q.front+i;j<=q.rear;j++)                    
 { 
  q.base[j-1]=q.base[j];    
 }
 q.rear--;

}

elemtype outqueue(sqqueue &q)     //队头元素出队列Q,并返回其值                
{   
 elemtype e;
 if(q.rear==q.front){printf("空队!");exit(0);}
     e=q.base[q.front];
  q.front++;                                  
  return e;

}

elemtype peekqueue(sqqueue &q)                   //只返回队首元素
{
 if(q.rear==q.front){printf("空队!");exit(0);}
 elemtype e=q.base[q.front];
 return e;
}


void printqueue(sqqueue &q)                   //输出队列
{
 if(q.rear==q.front){printf("空队!");exit(0);}
    else
  for(int i=q.front;i<q.rear;i++)           
    {
    printf("%3d",q.base[i]);  

    }
}
void clearqueue(sqqueue &q)          //队列清空
{
 q.rear=q.front;

}
int main()
{
 sqqueue q;
 elemtype n=0,e;
 printf("1.初始化顺序队列q!\n");
 initqueue(q);
 printf("此时队列长度为:%d\n",lengthqueue(q));
 printf("2.输入不超过9个不为0的元素进队:\n");
 int N=0;
 while(N!=9)
  {
    N++;
 printf("\n请输入第%d个数:",N);
 scanf("%d",&n);
 if(n!=-1)
 insertqueue(q,n);
  }
  printf("此时队列长度为:%d\n",lengthqueue(q));
  printf("输出列表为:");
  printqueue(q);
  printf("\n3.队头出队返回其值为:%d",outqueue(q));
  printf("\n此时队列长度为:%d\n",lengthqueue(q));
  printf("输出列表为:");
  printqueue(q);
  printf("\n4.输出队头元素为:%d\n",peekqueue(q));
  printf("此时队列长度为:%d\n",lengthqueue(q));
  printf("输出列表为:");
  printqueue(q);
  printf("\n5.删除第二个元素:\n");
  deletqueue(q,2);
  printf("此时队列长度为:%d\n",lengthqueue(q));
  printf("输出列表为:");
   printqueue(q);
  printf("\n6.清空队列:\n");
  clearqueue(q);
  printf("此时队列长度为:%d\n",lengthqueue(q));
  system("pause");;
}

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值