| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 672 人关注过本帖
标题:循环队列问题
取消只看楼主 加入收藏
cwl168
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2012-12-14
结帖率:8.33%
收藏
已结贴  问题点数:10 回复次数:4 
循环队列问题
#include<stdio.h>
#include<stdlib.h>
typedef struct Queue
{
    int *pBase;
    int front;
    int rear;

}Queue;
//函数的声明
void inti(Queue *);//初始化
bool enqueue(Queue *,int val);//入队列
bool dele(Queue *);//出队列
void print(Queue *);//打印队列
bool full(Queue *);
bool empty(Queue *);
int length(Queue *);
int main()
{
   int k,f,val;
   Queue Q;
   printf("\nplease input f to choose flowing op,-1 to end");
      printf("\n1:inti(Q)");
      printf("\n2:enqueue(Q)");
      printf("\n3:dele(Q)");
      printf("\n4:print(Q)");
      scanf("%d",&f);
  while(f!=-1)
  {
      switch (f)
      { case 1:inti(&Q);break;
        case 2:printf("\nplease input val:\n");
               scanf("%d",&val);
               enqueue(&Q,val);break;
        case 3:dele(&Q);break;
        case 4:print(&Q);break;
         
      }
      printf("\nplease input f to choose flowing op,-1 to end");
      printf("\n1:inti(Q)");
      printf("\n2:enqueue(Q)");
      printf("\n3:dele(Q,val)");
      printf("\n4:print(Q)");
      scanf("%d",&f);
  }
   return 0;
}
void inti(Queue *pQ)
{
    pQ->pBase=(int *)malloc(6*sizeof(int));    //申请24个字节的,并返回第一个字节的地址,并且是指向整形数据的
    pQ->front=0;
    pQ->rear=0;
    printf("初始化队列成功!\n");
}
bool enqueue(Queue *pQ,int val)
{
    if(!full(pQ))
    {
        printf("队列已满,不能入队列!\n");
        return false;
    }else
    {
        pQ->pBase[pQ->rear]=val;
        pQ->rear=(pQ->rear+1)%6;
        printf("入队列成功!\n");
        return true;
    }        

}
bool dele(Queue *pQ)
{   
    int val;
    if(pQ->front==pQ->rear)
    {
        printf("队列为空!\n");
         return false;
    }
     val=pQ->pBase[pQ->front];
     pQ->front=(pQ->front+1)%6;;
     printf("出队列的整数为%d\n",val);
    return true;
}
void print(Queue *pQ)
{
    if(pQ->front==pQ->rear)
    {
        printf("队列为空!");
    }
    int i = pQ->front;
    while (i != pQ->rear)
    {
        printf("%d  ", pQ->pBase[i]);
        i = (i+1) % 6;
    }
    printf("\n");

    return;
}
bool full(Queue *pQ)
{
    if((pQ->rear+1)%6==pQ->front)
    {
       return false;
    }
    else
    {
        return true;
    }
}
int length(Queue *pQ)
{
      return (pQ->rear-pQ->front)%6;
}


为什么访问队尾队头的时候是这样访问 pQ->pBase[pQ->rear], pQ->pBase[pQ->front],访问元素的这样访问 pQ->pBase[i]不是很理解,还有pQ->pBase=(int *)malloc(6*sizeof(int));,这个指针变量指向哪里,谢谢!
搜索更多相关主题的帖子: include void 
2012-12-15 12:38
cwl168
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2012-12-14
收藏
得分:0 
你说出队列这个函数,仅仅只是现实队列中的元素,元素并没有真正出队列,仔细想想也对
  bool out_queue(QUEUE * pQ, int * pVal)
{
    if ( emput_queue(pQ) )
    {
        return false;
    }
    else
    {
        *pVal = pQ->pBase[pQ->front];
        pQ->front = (pQ->front+1) % 6;

        return true;
    }
}
调用的时候
if ( out_queue(&Q, &val) )
    {
        printf("出队成功,队列出队的元素是: %d\n", val);
    }
    else
    {
        printf("出队失败!\n");
    }
这样行不行?
2012-12-15 20:24
cwl168
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2012-12-14
收藏
得分:0 
你说出队列这个函数,仅仅只是现实队列中的元素,元素并没有真正出队列,不是很懂,那应该怎么做呢
2012-12-15 20:30
cwl168
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2012-12-14
收藏
得分:0 
这是顺序结构的循环队列,又不是链式结构的可以释放节点,顺序表好像无法操作吧,只能是取出元素在赋值
2012-12-16 20:29
cwl168
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2012-12-14
收藏
得分:0 
是的
2012-12-17 21:51
快速回复:循环队列问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036240 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved