正文

循环队列的基本操作2007-09-08 16:46:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/7zeal/29219.html

分享到:

#define maxsize 5
#include <stdio.h>
#include <alloc.h>

typedef struct{
 int data[maxsize];
 int front;
 int rear;
}SqQueue;

void InitQueue(SqQueue *&q)
{
 q=(SqQueue*)malloc(sizeof(SqQueue));//有志向拉
 q->front=q->rear=0;
}

void ClearQueue(SqQueue *&q)
{
 free(q);
}

int EnQueue(SqQueue *&q,int &e)
{
 if((q->rear+1)%maxsize==q->front)
 {
  printf("队列满了\n",e);
  return 0;//队满
 }
 q->rear=(q->rear+1)%maxsize;
 q->data[q->rear]=e;

 return 1;
}

int ouQueue(SqQueue *&q,int &e)
{
 if((q->rear==q->front))
 {
  printf("队列为空\n",e);
  return 0;//队空
 }
 q->front=(q->front+1)%maxsize;
 e=q->data[q->front];
 printf("出队元素是%d\n",e);
 return 1;
}

void Show(SqQueue *&q)
{
    int i=0;
    for(i=0;i<((q->rear-q->front+maxsize)%maxsize);i++)
    printf("%d ",q->data[(q->front+1+i)%maxsize]);//比较好 循环的就利用求鱼
}

 

int main(int argc, char* argv[])
{
 SqQueue *q;
  int a=100,e;

  while(a!=0)
  {
    printf("选择操作1:INIT 2:IN 3:OUT 4:Show 5:Clear\n");
    scanf("%d",&a);
   switch(a)
     {

    case 1:InitQueue(q);printf("队列已建立\n");break;
    case 2:printf("输入入队元素\n");scanf("%d",&e);EnQueue(q,e);break;
    case 3:ouQueue(q,e);break;
    case 4:Show(q);printf("\n");break;
    case 5:ClearQueue(q);break;
   

     }

  }
 return 0;
}

阅读(3843) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册