这学期学数据结构,写链队列算法,遍历函数的时候有个问题,哪位解答下~

用C++写的,没有正统的学过C++#include<stdio.h>#include<stdlib.h>#defineOK1#defineERROR0#defineOVE... 用C++ 写的,没有正统的学过C++
#include<stdio.h>#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int QElemType;
typedef struct QNode{
QElemType data;
QNode *next;
}*QueuePtr;
struct LinkQueue{
QueuePtr front;
QueuePtr rear;
};
//新建一个空队列void InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)
exit(OVERFLOW);
Q.front->next=NULL;
}
//插入元素(因为是队列,只能在对尾插入)到队列----入队void AddQueue(LinkQueue &Q)
{
QueuePtr p;
int x;
printf("请输入元素的值(输入0结束):\n");
scanf("%d",&x);
while(x)
{
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)
exit(OVERFLOW);
p->data=x;
p->next=NULL;
Q.rear->next=p;//原来的队尾结点指向新结点
Q.rear=p;
scanf("%d",&x);
}
}
//遍历链队列void ShowQueue(LinkQueue Q)
{
QueuePtr p;
// QElemType e;
p=Q.front->next;
// e=p->data;
while(p)
{
// printf("%d",e);
printf("%d",p->data);
printf(" ");
p=p->next;
}
printf("\n");
}
//链队列对头元素出队Status OutQueue(LinkQueue &Q,QElemType &e)
{
QueuePtr p;
if(Q.front==Q.rear)
return ERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
return OK;
}
void main()
{
LinkQueue Lq;
QElemType x;
int menu,flag;
while(true) {
printf("1 建立链队列(元素为整数)\n");
printf("2 输入元素--入队\n");
printf("3 对都元素--出队\n");
printf("0 退出\n");
printf("\n请输入所选菜单(0-3):");
scanf("%d",&menu);
switch(menu)
{
case 1: InitQueue(Lq);
AddQueue(Lq);
ShowQueue(Lq);
break;
case 2: AddQueue(Lq); ShowQueue(Lq);
break;
case 3: flag=OutQueue(Lq,x); if(flag==0)
{
printf("队头元素出队失败!\n");
printf("队列为: ");
ShowQueue(Lq);
break;
}else
{
printf("队头元素出队成功!\n");
printf("队列为: ");
ShowQueue(Lq);
break;
}
case 0: exit(0);
}
}
}
展开
 我来答
蓦然prince
2012-11-08 · TA获得超过255个赞
知道小有建树答主
回答量:163
采纳率:0%
帮助的人:107万
展开全部

同学你好:我看了你的程序:出现你截图中的原因是,在你每次将数值入队后就跳出了程序:

这是我帮你修改了 的程序,希望你能采纳:

实验结果:

 

#include<stdio.h>#include<stdlib.h>

#define OK 1

#define ERROR 0

#define OVERFLOW -2

 

typedef int Status;

typedef int QElemType;

 

typedef struct QNode

{

 QElemType data;

 QNode *next;

}*QueuePtr;

 

struct LinkQueue

{

 QueuePtr front;

 QueuePtr rear;

};

 

//新建一个空队列

void InitQueue(LinkQueue &Q)

{

 Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));

 if(!Q.front)

  exit(OVERFLOW);

 Q.front->next=NULL;

}

 

//插入元素(因为是队列,只能在对尾插入)到队列----入队

void AddQueue(LinkQueue &Q)

{

 QueuePtr p;

 int x;

 printf("请输入元素的值(输入0结束):\n");

 scanf("%d",&x);

 while(x)

 {

  p=(QueuePtr)malloc(sizeof(QNode));

  if(!p)

   exit(OVERFLOW);

  p->data=x;

  p->next=NULL;

  Q.rear->next=p;//原来的队尾结点指向新结点

  Q.rear=p;

  scanf("%d",&x);

 }

}

 

//遍历链队列

void ShowQueue(LinkQueue Q)

{

 QueuePtr p;

// QElemType e;

 p=Q.front->next;

// e=p->data;

 while(p)

 {

//  printf("%d",e);

  printf("%d",p->data);

  printf("   ");

        p=p->next;

 }

 printf("\n");

}

 

//链队列对头元素出队

Status OutQueue(LinkQueue &Q,QElemType &e)

{

 QueuePtr p;

 if(Q.front==Q.rear)

  return ERROR;

 p=Q.front->next;

 e=p->data;

 Q.front->则吵next=p->next;

 if(Q.rear==p)

  Q.rear=Q.front;

 free(p);

 return OK;

}

void main()

{

 LinkQueue Lq;

 QElemType x;

 int menu,flag;

 

 while(true)

 {

  printf("1 建立链队列(元素为整数)\n");

  printf("2 输入梁链元素--入队\n");

  printf("3 对都元素--出队\n");

  printf("0 退出\n");

  printf("\n请输入所选菜单(0-3):");

  scanf("%d",&menu);

  switch(menu)

  {

   case 1: InitQueue(Lq);

     AddQueue(Lq);

     ShowQueue(Lq);

 

   case 2: AddQueue(Lq);

     ShowQueue(Lq);

 

   case 3: flag=OutQueue(Lq,x);

     if(flag==0)

     {

      printf("队头元素出队失败!\n");

      printf("队列为: ");

      ShowQueue(Lq);

     }else

     {

      printf("队头元素出队成功!\n");

      printf("队列橡盯孙为: ");

      ShowQueue(Lq);

     }

 

   case 0: exit(0);

 

  }

 }

}

光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
Mr___Ken
2012-11-08 · 超过11用户采纳过TA的回答
知道答主
回答量:46
采纳率:100%
帮助的人:20万
展开全部
函数ShowQueue(LinkQueue Q)中的“e=p->data;”放在while(p)前面当然不行啦,这样e只是链表的头元素,要把“e=p->data;”放到循环内,就是

void ShowQueue(LinkQueue Q)
{
QueuePtr p;
QElemType e;
p=Q.front->next;
while(p)
{
e=p->data;
printf("%d",e);
//printf("%d",p->data);
printf(" "迹拍槐);
p=p->next;
}
printf("\姿友n"贺神);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-11-09
展开全部
记得插入时有个先后顺序着。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式