鱼C论坛

 找回密码
 立即注册
查看: 2465|回复: 6

[已解决]为什么我后面的进队元素不打印???

[复制链接]
发表于 2018-3-29 16:59:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# define MAXSIZEQ 100
typedef struct{
        int *base;
        int front;
        int rear;
}SQueue;

void initQ(SQueue *Q)   //初始化队元素。
{
        Q->base=(int*)malloc(MAXSIZEQ*sizeof(int));
        if(!Q->base)
        {
                printf("空间无法正常分配,对不起哦~\n");
        }
        Q->front=Q->rear=0;
}

void creatQ(SQueue *Q)   //创建队元素
{
        int n,i;
        printf("请输入您要创建的元素个数:");
        scanf("%d",&n);
        if((Q->rear+1)%MAXSIZEQ==Q->front)
        {
                printf("该队已满了哦,你不可以插入了哦~\n");
        }
        for(i=0;i<n;i++)
        {
                printf("请输入第%d个元素:",i+1);
                scanf("%d",&Q->base[Q->rear]);
                Q->rear=(Q->rear+1)%MAXSIZEQ;
        }
}

void showQ(SQueue *Q)   //显示队元素
{
        int i;
        if(Q->front==Q->rear)
        {
                printf("不可以出队了哦 此时队空~\n");
        }
        for(i=0;i<(Q->rear-Q->front+MAXSIZEQ)%MAXSIZEQ;i++)
        {
                printf("%d ",Q->base[Q->front]);
                Q->front=(Q->front+1)%MAXSIZEQ;
        }
        printf("\n");
}

int lengthQ(SQueue *Q) //打印队长
{
        int n;
        n=(Q->rear-Q->front+MAXSIZEQ)%MAXSIZEQ;
        printf("您的队长为:%d\n",n);
        return 0;
}

void isempty(SQueue *Q) //判断是否是空队列
{
        if(Q->rear==Q->front)
                printf("此时队列是空的哦~\n");
        else
                printf("此时队列不为空哦~\n");
}

void destroyQ(SQueue *Q)  //销毁该队列
{
        free(Q->base);
        Q->front=Q->rear=0;
        printf("此时队列已经被销毁了哦~\n");
}

void getQ(SQueue *Q)  //查看队头元素
{
        int e;
        e=Q->base[Q->front];
        printf("您的队头元素是:%d\n",e);
}


void enQ(SQueue *Q) // 进队
{
        int e;
        if((Q->rear+1)%MAXSIZEQ==Q->front)
                printf("此时队满了哦,不可以再进队了~\n");
        else
        {
                printf("请写入您需要进队的元素内容:");
                scanf("%d",&e);
                Q->base[Q->rear]=e;
                Q->rear=(Q->rear+1)%MAXSIZEQ;
        }
}

void deQ(SQueue *Q)//出队
{
        if(Q->rear==Q->front)
                printf("此时队空了哦,不可以再出队了~\n");
        else
        {
                printf("您的出队元素内容为:%d\n",Q->base[Q->front]);
                Q->front=(Q->front+1)%MAXSIZEQ;
        }
}





int main()
{
        SQueue Q;
        initQ(&Q);
        creatQ(&Q);
        lengthQ(&Q);
        //isempty(&Q);
        //destroyQ(&Q);
        //creatQ(&Q);
        //getQ(&Q);
        enQ(&Q);
        lengthQ(&Q);
        //getQ(&Q);
        enQ(&Q);
        lengthQ(&Q);
        deQ(&Q);
        lengthQ(&Q);
        printf("您此时队中的元素为:");
        showQ(&Q);
        //lengthQ(&Q);
        //isempty(&Q);
        return 0;
}
最佳答案
2018-3-29 20:38:13
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. # define MAXSIZEQ 100
  4. typedef struct{
  5.         int *base;
  6.         int front;
  7.         int rear;
  8. }SQueue;

  9. void initQ(SQueue *Q)   //初始化队元素。
  10. {
  11.         Q->base=(int*)malloc(MAXSIZEQ*sizeof(int));
  12.         if(!Q->base)
  13.         {
  14.                 printf("空间无法正常分配,对不起哦~\n");
  15.         }
  16.         Q->front=Q->rear=0;
  17. }

  18. void creatQ(SQueue *Q)   //创建队元素
  19. {
  20.         int n,i;
  21.         printf("请输入您要创建的元素个数:");
  22.         scanf("%d",&n);

  23.                 if(Q->base) // 内存没有被销毁
  24.                 {

  25.                         for(i=0;i<n;i++)
  26.                         {               
  27.                                                         if((Q->rear+1)%MAXSIZEQ==Q->front)
  28.                                         {
  29.                                                 printf("该队已满了哦,你不可以插入了哦~\n");
  30.                                                 break;
  31.                                         }

  32.                                         printf("请输入第%d个元素:",i+1);
  33.                                         scanf("%d",&Q->base[Q->rear]);
  34.                                         Q->rear=(Q->rear+1)%MAXSIZEQ;



  35.                
  36.                                 
  37.                         }
  38.                 }
  39.                 else
  40.                 {
  41.                         printf("队列已被销毁!\n");
  42.                 }


  43. }

  44. void showQ(SQueue *Q)   //显示队元素
  45. {
  46.         int i, len;
  47.         if(Q->front==Q->rear)
  48.         {
  49.                 printf("不可以出队了哦 此时队空~\n");
  50.         }

  51.                 len = (Q->rear - Q->front + MAXSIZEQ ) % MAXSIZEQ;
  52.         for(i=0; i < len ;i++) // 你这之 Q->front这里也在 +
  53.         {
  54.                 printf("%d ",Q->base[Q->front]);
  55.                 Q->front=(Q->front+1)%MAXSIZEQ; // Q->front这里也在 +
  56.         }
  57.         printf("\n");
  58. }

  59. int lengthQ(SQueue *Q) //打印队长
  60. {
  61.         int n;
  62.         n=(Q->rear-Q->front+MAXSIZEQ)%MAXSIZEQ;
  63.         printf("您的队长为:%d\n",n);
  64.         return 0;
  65. }

  66. void isempty(SQueue *Q) //判断是否是空队列
  67. {
  68.         if(Q->rear==Q->front)
  69.                 printf("此时队列是空的哦~\n");
  70.         else
  71.                 printf("此时队列不为空哦~\n");
  72. }

  73. void destroyQ(SQueue *Q)  //销毁该队列
  74. {
  75.         free(Q->base);
  76.         Q->front=Q->rear=0;
  77.         printf("此时队列已经被销毁了哦~\n");
  78. }

  79. void getQ(SQueue *Q)  //查看队头元素
  80. {
  81.         int e;
  82.         e=Q->base[Q->front];
  83.         printf("您的队头元素是:%d\n",e);
  84. }


  85. void enQ(SQueue *Q) // 进队
  86. {
  87.         int e;
  88.         if((Q->rear+1)%MAXSIZEQ==Q->front)
  89.                 printf("此时队满了哦,不可以再进队了~\n");
  90.         else
  91.         {
  92.                 printf("请写入您需要进队的元素内容:");
  93.                 scanf("%d",&e);
  94.                 Q->base[Q->rear]=e;
  95.                 Q->rear=(Q->rear+1)%MAXSIZEQ;
  96.         }
  97. }

  98. void deQ(SQueue *Q)//出队
  99. {
  100.         if(Q->rear==Q->front)
  101.                 printf("此时队空了哦,不可以再出队了~\n");
  102.         else
  103.         {
  104.                 printf("您的出队元素内容为:%d\n",Q->base[Q->front]);
  105.                 Q->front=(Q->front+1)%MAXSIZEQ;
  106.         }
  107. }





  108. int main()
  109. {
  110.         SQueue Q;
  111.         initQ(&Q);
  112.         creatQ(&Q);
  113.         lengthQ(&Q);
  114.         //isempty(&Q);
  115.         //destroyQ(&Q);
  116.         //creatQ(&Q);
  117.         //getQ(&Q);
  118.         enQ(&Q);
  119.         lengthQ(&Q);
  120.         //getQ(&Q);
  121.         enQ(&Q);
  122.         lengthQ(&Q);
  123.         deQ(&Q);
  124.         lengthQ(&Q);
  125.         printf("您此时队中的元素为:");
  126.         showQ(&Q);
  127.         //lengthQ(&Q);
  128.         //isempty(&Q);
  129.         return 0;
  130. }
复制代码
QQ图片20180329165942.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-29 20:38:13 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. # define MAXSIZEQ 100
  4. typedef struct{
  5.         int *base;
  6.         int front;
  7.         int rear;
  8. }SQueue;

  9. void initQ(SQueue *Q)   //初始化队元素。
  10. {
  11.         Q->base=(int*)malloc(MAXSIZEQ*sizeof(int));
  12.         if(!Q->base)
  13.         {
  14.                 printf("空间无法正常分配,对不起哦~\n");
  15.         }
  16.         Q->front=Q->rear=0;
  17. }

  18. void creatQ(SQueue *Q)   //创建队元素
  19. {
  20.         int n,i;
  21.         printf("请输入您要创建的元素个数:");
  22.         scanf("%d",&n);

  23.                 if(Q->base) // 内存没有被销毁
  24.                 {

  25.                         for(i=0;i<n;i++)
  26.                         {               
  27.                                                         if((Q->rear+1)%MAXSIZEQ==Q->front)
  28.                                         {
  29.                                                 printf("该队已满了哦,你不可以插入了哦~\n");
  30.                                                 break;
  31.                                         }

  32.                                         printf("请输入第%d个元素:",i+1);
  33.                                         scanf("%d",&Q->base[Q->rear]);
  34.                                         Q->rear=(Q->rear+1)%MAXSIZEQ;



  35.                
  36.                                 
  37.                         }
  38.                 }
  39.                 else
  40.                 {
  41.                         printf("队列已被销毁!\n");
  42.                 }


  43. }

  44. void showQ(SQueue *Q)   //显示队元素
  45. {
  46.         int i, len;
  47.         if(Q->front==Q->rear)
  48.         {
  49.                 printf("不可以出队了哦 此时队空~\n");
  50.         }

  51.                 len = (Q->rear - Q->front + MAXSIZEQ ) % MAXSIZEQ;
  52.         for(i=0; i < len ;i++) // 你这之 Q->front这里也在 +
  53.         {
  54.                 printf("%d ",Q->base[Q->front]);
  55.                 Q->front=(Q->front+1)%MAXSIZEQ; // Q->front这里也在 +
  56.         }
  57.         printf("\n");
  58. }

  59. int lengthQ(SQueue *Q) //打印队长
  60. {
  61.         int n;
  62.         n=(Q->rear-Q->front+MAXSIZEQ)%MAXSIZEQ;
  63.         printf("您的队长为:%d\n",n);
  64.         return 0;
  65. }

  66. void isempty(SQueue *Q) //判断是否是空队列
  67. {
  68.         if(Q->rear==Q->front)
  69.                 printf("此时队列是空的哦~\n");
  70.         else
  71.                 printf("此时队列不为空哦~\n");
  72. }

  73. void destroyQ(SQueue *Q)  //销毁该队列
  74. {
  75.         free(Q->base);
  76.         Q->front=Q->rear=0;
  77.         printf("此时队列已经被销毁了哦~\n");
  78. }

  79. void getQ(SQueue *Q)  //查看队头元素
  80. {
  81.         int e;
  82.         e=Q->base[Q->front];
  83.         printf("您的队头元素是:%d\n",e);
  84. }


  85. void enQ(SQueue *Q) // 进队
  86. {
  87.         int e;
  88.         if((Q->rear+1)%MAXSIZEQ==Q->front)
  89.                 printf("此时队满了哦,不可以再进队了~\n");
  90.         else
  91.         {
  92.                 printf("请写入您需要进队的元素内容:");
  93.                 scanf("%d",&e);
  94.                 Q->base[Q->rear]=e;
  95.                 Q->rear=(Q->rear+1)%MAXSIZEQ;
  96.         }
  97. }

  98. void deQ(SQueue *Q)//出队
  99. {
  100.         if(Q->rear==Q->front)
  101.                 printf("此时队空了哦,不可以再出队了~\n");
  102.         else
  103.         {
  104.                 printf("您的出队元素内容为:%d\n",Q->base[Q->front]);
  105.                 Q->front=(Q->front+1)%MAXSIZEQ;
  106.         }
  107. }





  108. int main()
  109. {
  110.         SQueue Q;
  111.         initQ(&Q);
  112.         creatQ(&Q);
  113.         lengthQ(&Q);
  114.         //isempty(&Q);
  115.         //destroyQ(&Q);
  116.         //creatQ(&Q);
  117.         //getQ(&Q);
  118.         enQ(&Q);
  119.         lengthQ(&Q);
  120.         //getQ(&Q);
  121.         enQ(&Q);
  122.         lengthQ(&Q);
  123.         deQ(&Q);
  124.         lengthQ(&Q);
  125.         printf("您此时队中的元素为:");
  126.         showQ(&Q);
  127.         //lengthQ(&Q);
  128.         //isempty(&Q);
  129.         return 0;
  130. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-29 21:53:59 | 显示全部楼层

我把函数的creatQ函数改成你那样带判断的,可是为什么我销毁了线性表之后,它不执行creatQ函数中的else语句??为什么还是可以继续创建队列



# define MAXSIZEQ 100
# include<stdio.h>
# include<stdlib.h>
typedef struct{
        int *base;
        int front;
        int rear;
}SQueue;

void initQ(SQueue *Q)   //初始化队元素。
{
        Q->base=(int*)malloc(MAXSIZEQ*sizeof(int));
        if(!Q->base)
        {
                printf("空间无法正常分配,对不起哦~\n");
        }
        Q->front=Q->rear=0;
}

void creatQ(SQueue *Q)   //创建队元素
{
        int n,i;
        printf("请输入您要创建的元素个数:");
        scanf("%d",&n);
        if(Q->base)
        {       
                for(i=0;i<n;i++)
                {
                        if(((Q->rear+1)%MAXSIZEQ==Q->front))
                        {
                                printf("该队已满了哦,你不可以插入了哦~\n");
                                break;
                        }
                        printf("请输入第%d个元素:",i+1);
                        scanf("%d",&Q->base[Q->rear]);
                        Q->rear=(Q->rear+1)%MAXSIZEQ;
                }
        }
        else
        {
                printf("队列已被销毁!\n");
        }
}




void showQ(SQueue *Q)   //显示队元素
{
        int i,count;
        if(Q->front==Q->rear)
        {
                printf("不可以出队了哦 此时队空~\n");
        }
        count=(Q->rear-Q->front+MAXSIZEQ)%MAXSIZEQ;
        for(i=0;i<count;i++)
        {
                printf("%d ",Q->base[Q->front]);
                Q->front=(Q->front+1)%MAXSIZEQ;
        }
        printf("\n");
}

int lengthQ(SQueue *Q) //打印队长
{
        int n;
        n=(Q->rear-Q->front+MAXSIZEQ)%MAXSIZEQ;
        printf("您的队长为:%d\n",n);
        return 0;
}

void isempty(SQueue *Q) //判断是否是空队列
{
        if(Q->rear==Q->front)
                printf("此时队列是空的哦~\n");
        else
                printf("此时队列不为空哦~\n");
}

void destroyQ(SQueue *Q)  //销毁该队列
{
        free(Q->base);
        Q->front=Q->rear=0;
        printf("此时队列已经被销毁了哦~\n");
}

void getQ(SQueue *Q)  //查看队头元素
{
        int e;
        e=Q->base[Q->front];
        printf("您的队头元素是:%d\n",e);
}


void enQ(SQueue *Q) // 进队
{
        int e;
        if((Q->rear+1)%MAXSIZEQ==Q->front)
                printf("此时队满了哦,不可以再进队了~\n");
        else
        {
                printf("请写入您需要进队的元素内容:");
                scanf("%d",&e);
                Q->base[Q->rear]=e;
                Q->rear=(Q->rear+1)%MAXSIZEQ;
        }
}

void deQ(SQueue *Q)//出队
{
        if(Q->rear==Q->front)
                printf("此时队空了哦,不可以再出队了~\n");
        else
        {
                printf("您的出队元素内容为:%d\n",Q->base[Q->front]);
                Q->front=(Q->front+1)%MAXSIZEQ;
        }
}

void clearQ(SQueue *Q)
{
        Q->front=Q->rear=0;
        printf("此时您的队列已经被清空了哦\n");
}





int main()
{
        SQueue Q;
        initQ(&Q);
        creatQ(&Q);
        lengthQ(&Q);
        clearQ(&Q);
        //isempty(&Q);
        destroyQ(&Q);
        creatQ(&Q);
        //getQ(&Q);
        //enQ(&Q);
        //lengthQ(&Q);
        //getQ(&Q);
        //enQ(&Q);
        //lengthQ(&Q);
        //deQ(&Q);
        //lengthQ(&Q);
        printf("您此时队中的元素为:");
        showQ(&Q);
        lengthQ(&Q);
        //isempty(&Q);
        return 0;
}
QQ图片20180329215100.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-29 22:11:56 | 显示全部楼层
愿你 发表于 2018-3-29 21:53
我把函数的creatQ函数改成你那样带判断的,可是为什么我销毁了线性表之后,它不执行creatQ函数中的else语 ...

看你的上一遍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-29 22:22:58 | 显示全部楼层

啊????啥???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-29 22:35:29 | 显示全部楼层

[待解决] 关于循环队列销毁问题~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-30 18:57:07 From FishC Mobile | 显示全部楼层
ba21 发表于 2018-3-29 22:35
[待解决] 关于循环队列销毁问题~

可以加个微信qq啥的吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 16:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表