汇编网首页登录博客注册
chinatree的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
友情链接

[2011-10-12 16:25] C语言循环队列

#include <stdio.h>
#include <dos.h>/*slepp()*/
#include <mem.h>/*memset函数在这*/
typedef struct
{
   int a[100];/*队列空间*/
   int b;/*队尾*/
   int c;/*对首*/
   int d;/*元素个数*/
}abc;
char full(abc * q)
{
  return ((q->b+1)%100==q->c)?1:0;
}
char empty(abc * q)
{
  return (q->c==q->b)?1:0;
}
void insert(abc * q,int p)/*入队*/
{
   if(full(q))              /**/
      printf("list full\n");
   else
     {
       q->a[q->b]=p;
       q->b=(q->b+1)%100;
       printf("  OK  %d",++(q->d));
      }
    sleep(1);
   return   ;
}
void deleted(abc* q,int *p)/*出队*/
{
   if(empty(q))          /**/
      printf("delete fail!\n");
   else
    {
      *p=q->a[q->c];
      q->c=(q->c+1)%100;
      printf("OK! %d\n",--(q->d));
    }
    sleep(1);
   return ;
}
void traverse(abc *q)/*遍历队列*/
{
   int i=q->d;
   int j=q->c;
   while(i--)
     printf("%d  ",q->a[j++]);
   printf("\n");
   sleep(2);
   return ;
}
int main(void)
{
   int e;
   abc ABC;
  /*ABC.b=99;*/
   memset(&ABC,0,sizeof(int)*103);/*队列空间填零*/
   while(1)
  {
   clrscr();
   printf("1.insert\n");
   printf("2.delete\n");
   printf("3.traverse\n");
   e=getch();
   if(e==0x1b) break;
   else if (e<0x31||e>0x33) continue;
   else
      switch(e)
     {
       case 0x31:                  /*数字1写入*/
     printf("Please input a number!\n");
     scanf("%d",&e);
       insert(&ABC,e);
     break;
       case 0x32:
       printf("delet:");
       deleted(&ABC,&e);
           break;
       case 0x33:
          traverse(&ABC);break;                 /*遍历输出*/
       }
    }
   /*free(ABC);*/               /*释放空间*/
   return 0;

}
评论次数(0)  |  浏览次数(795)  |  类型(默认类型) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码