| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1198 人关注过本帖
标题:循环队列
只看楼主 加入收藏
hdmiforc
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2019-4-1
结帖率:0
收藏
 问题点数:0 回复次数:1 
循环队列
图片附件: 游客没有浏览图片的权限,请 登录注册


#include <stdio.h>
#include <stdlib.h>
#define MAXNUM 10000
typedef struct
{
    int *q;
    int length,rear;

}SeqQueue;


void creat(SeqQueue* paqu)
{

    (*paqu).q=(int *)malloc(sizeof(int)*(MAXNUM));
    if((*paqu).q==NULL)
    {
        printf("Out Space\n");
    }
    else
    {
        (*paqu).length=0;
        (*paqu).rear=0;
    }

}

int full( SeqQueue paqu){
  if(MAXNUM==paqu.length)return 1;
  else return 0;
}
void  enQueue_seq( SeqQueue* paqu, int x )

{
    if ( full(*paqu) )
        printf ( "Full queue.\n" );
    else
    {
        (*paqu).q[(*paqu).rear] = x;
        (*paqu).rear =((*paqu).rear+1)%MAXNUM;
        (*paqu).length++;
    }
}

int  deQueue_seq( SeqQueue* paqu)

{
    int p,head;
    head=((*paqu).rear+MAXNUM-(*paqu).length)%MAXNUM;
    if (!(*paqu).length)
        printf ( "Empty Queue.\n" );
    else
    {   p=(*paqu).q[head];
        (*paqu).length--;}
        return p;

}
void shuchu( SeqQueue paqu){
int head,cnt;
head=(paqu.rear+MAXNUM-paqu.length)%MAXNUM;
for(cnt=1;cnt<=paqu.length;head=(head+1)%MAXNUM,cnt++){
    printf("%d ",paqu.q[head]);
}
}
int get(SeqQueue paqu){
 int head;
 head=(paqu.rear+MAXNUM-paqu.length)%MAXNUM;
 return paqu.q[head];
}
int main()
{
    int length,i=0,p,cnt=0;

    scanf("%d",&length);
    SeqQueue Q;
    creat(&Q);
    char s[10000];
    int num[10000]= {0},j;
    getchar();
    gets(s);
  while(s[i]!='\0')

    {
        int t;
        if (s[i] == ' ')
        {
            i++;
            continue;
        }
        else
        {
            for (j = i; s[j] != ' ' && s[j]!='\0'; j++)
            {
                num[cnt] = num[cnt] * 10 + (s[j] - '0');
                t=j+1;
            }
            cnt++;
            i=t;
        }
    }
    i=0;
    while(i<length)
    {

        enQueue_seq(  &Q, num[i]);
        i++;
    }
    if(cnt>=length)printf("yes\n");
    else printf("no\n");
    int d;
    scanf("%d",&d);
    for(i=0;i<length;i++){
    p=deQueue_seq(&Q);
    if(p==d)break;
    }
    shuchu(Q);
    printf("\n");
   if(Q.length){ p=get(Q);
   printf("%d",p);}
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册

不知道为什么提交显示结果错误
搜索更多相关主题的帖子: int length printf return head 
2019-04-01 17:45
hdmiforc
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2019-4-1
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

换了另一种不知道为什么超时了,求指点

#include <stdio.h>
#include <stdlib.h>
#define MAXNUM 10000
struct SeqQueue
{
    int q[MAXNUM];
    int front,rear;
};
typedef struct SeqQueue *PSeqQueue;
PSeqQueue creat()
{
    PSeqQueue paqu;
    paqu=(PSeqQueue)malloc(sizeof(struct SeqQueue));
    if(paqu==NULL)
    {
        printf("Out Space\n");
    }
    else
    {
        paqu->front=0;
        paqu->rear=0;
    }
    return paqu;
}
int empty(PSeqQueue paqu)
{
    return (paqu->front==paqu->rear);
}
void  enQueue_seq( PSeqQueue paqu, int x )

{
    if ( (paqu->rear + 1) % MAXNUM == paqu->front  )
        printf ( "Full queue.\n" );
    else
    {
        paqu->q[paqu->rear] = x;
        paqu->rear = (paqu->rear + 1) % MAXNUM;
    }
}

int  deQueue_seq( PSeqQueue paqu,int d)

{
    int p;
    if (empty(paqu))
        printf ( "Empty Queue.\n" );
    else  while(paqu->q[paqu->front]!=d)
            paqu->front = (paqu->front + 1) % MAXNUM;
    paqu->front = (paqu->front + 1) % MAXNUM;
    p=paqu->q[paqu->front];
    return p;
}
void shuchu( PSeqQueue paqu){
 while(!empty(paqu)){
    printf("%d ",paqu->q[paqu->front]);
    paqu->front+=1;
 }
}

int main()
{
    int length,i=0,p,cnt=0;
    PSeqQueue paqu;
    paqu=creat();
    scanf("%d",&length);
    char s[10000];
    int num[10000]= {0},j;
    getchar();
    gets(s);

    while(s[i]!='\0')

    {
        int t;
        if (s[i] == ' ')
        {
            i++;
            continue;
        }
        else
        {
            for (j = i; s[j] != ' ' && s[j]!='\0'; j++)
            {
                num[cnt] = num[cnt] * 10 + (s[j] - '0');
                t=j+1;
            }
            cnt++;
            i=t;
        }
    }
    i=0;
    while(i<cnt)
    {

        enQueue_seq(  paqu, num[i]);
        i++;
    }
    if(cnt>=length)printf("yes\n");
    else printf("no\n");
    int d;
    scanf("%d",&d);
    p=deQueue_seq(paqu,d);
    shuchu(paqu);
    printf("\n");
   printf("%d",p);
    return 0;
}
2019-04-01 21:31
快速回复:循环队列
数据加载中...
 
   



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

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