首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

c队列解决方法

2012-02-15 
c队列#includeiostream#includestdlib.husingnamespacestd/*定义链队列*/#defineqlize5typedefintNod

c队列
#include   <iostream>
#include   <stdlib.h>
using   namespace   std;
/*定义链队列*/
#define   qlize   5
typedef   int   NodeData;
typedef   struct   node
{
  NodeData   nodedata;     //节点数据
  struct   node   *   next;   //指向下一个节点的指针
}QueueNode;

typedef   struct   linkList
{
  QueueNode   *   head;   //队头指针
  QueueNode   *   rear;   //队尾指针
}LinkQueue;

/*初始化队列*/
void   initQueue(LinkQueue   *   linkQueue)
{
  linkQueue-> head=linkQueue-> rear=NULL;

}

/*判队空*/
int   isEmptyQueue(LinkQueue   *   linkQueue)
{
  return   linkQueue-> head==NULL&&linkQueue-> rear==NULL;
}

/*入队*/
void   inQueue(LinkQueue   *   linkQueue,NodeData   nodeData)
{
  //从队尾入队
  QueueNode   *inNode=(QueueNode   *)malloc(sizeof(QueueNode));
  inNode-> nodedata=nodeData;
  inNode-> next=NULL;
  //如果队为空
  if(isEmptyQueue(linkQueue))
  {
    linkQueue-> head=inNode;
    linkQueue-> rear=inNode;
  }
  else
  {
    QueueNode   *rearNode=linkQueue-> rear;
    rearNode-> next=inNode;
    linkQueue-> rear=inNode;
  }
}

/*出队*/
NodeData   outQueue(LinkQueue   *   linkQueue)
{
  //从队首出队
  QueueNode   *outNode;
  NodeData   nodeDate;
  if(isEmptyQueue(linkQueue))
  {
    printf( "THE   QUEUE   LIST   IS   NULL ");
    exit(0);
  }
  outNode=linkQueue-> head;
  nodeDate=outNode-> nodedata;
  linkQueue-> head=outNode-> next;
  if(linkQueue-> rear==outNode)
  {
    linkQueue-> rear=NULL;
  }
  free(outNode);
  return   nodeDate;
}
/*打印队列*/
void   printQueue(LinkQueue   *   linkQueue)
{
  QueueNode   *headNode=linkQueue-> head;
  int   i=1;
  QueueNode   *node=headNode;
  printf( "the   node   %d   is   %d\n ",i++,node-> nodedata);
  while(node=node-> next)
  {
    printf( "the   node   %d   is   %d\n ",i,node-> nodedata);
   
    i++;
  }
}
void   main()
{
  LinkQueue   *   linkQueue;
  int   inData;   //入队数据
  linkQueue=(LinkQueue   *)malloc(sizeof(LinkQueue));
  //入队
  initQueue(linkQueue);
  printf( "please   input   queue\n ");
  for(int   i=1;inData!=qlize;i++)//控制入队的循环不知道qlize应该用什么来代
  {               //替,才能够完成任何数入队
    cin> > inData;
    inQueue(linkQueue,inData);
  }
  //打印入队后的队列
  printQueue(linkQueue);
  //出队
  while(isEmptyQueue(linkQueue)!=1)
  {
    NodeData   nodedata=outQueue(linkQueue);
    printf( "out   queue   %d\n ",nodedata);
  }
}

这个是一个正确的程序 但是我总是觉得他的控制入队列是是有问题的 比如有两个5时 到第一个5队列入队就结束了 我不知道怎么控制才能够解决这个问题,我用回车来控制时又不能够结束循环啊,大哥大姐们帮一下啊.



[解决办法]
1.设定计数器
for(int num=0;num <MAXNUM;num++){;}//MAXNUM 是常数

2.如果你一定要输入多个qLize的话,可以设定一个5的数目的上限。
int numofqLize=0;
for(;;)
{
cin> > inData;
if(inData==qLize)
numofqLize++;
if(numofqLize==MAXNUMOFQLIZE)//MAXNUMOFQLIZE是常数
break;
inQueue(linkQueue,inData);
}


P.S.提醒大家一下,刚才我直接复制、粘贴代码,结果出现了多余空格的错误,重新敲入代码后不再出现这个错误。
[解决办法]
补充一下,如果不设定qLize的上限也可以,
3.
int equaltoqLize=qLize+1;
for(;;)
{

cin> > inData;
if(inData==qLize)
equaltoqLize=qLize;
if((inData!=qLize)&&(equaltoqLize==qLize))//前一次出现qLize但这次不是qLize
break;
inQueue(linkQueue,inData);
}


热点排行