| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1109 人关注过本帖
标题:请教一个关于归纳的问题
只看楼主 加入收藏
Lupkid
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-10-18
收藏
 问题点数:0 回复次数:3 
请教一个关于归纳的问题
假设以数组sequ[m]存放循环队列的元素,同时设变量rear和quelen分别指示循环队列中队尾元素的位置和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队列算法中要返回队头元素)。

#include "iostream"
#include "stdlib.h"
#include "stdio.h"
#include "malloc.h"
#define OK 1
#define m 5
using namespace std;
typedef struct{
    int sequ[m];
    int length;
    int rear;
}SqQueue;
SqQueue Q;
int n;
int InitQueue(SqQueue &Q){
    Q.rear=0;
    Q.length=0;
    return OK;
}
int EnQueue(SqQueue &Q,int e){
    if(Q.length>=m){
        cout<<"error"<<endl;
        exit(0);
    }
    Q.sequ[Q.rear]=e;
    Q.rear=(Q.rear+1)%m;
    Q.length++;
    return OK;
}
int DeQueue(SqQueue &Q,int &e){
    if(Q.length<=0){
        cout<<"error"<<endl;
        exit(0);
    }
    e=Q.sequ[(m+Q.rear-Q.length)%m];//这条件怎么想出来的啊,我想了半天都想不到
    Q.length--;
    return OK;
}
int Put(SqQueue Q){
    int i;
    for(i=(m+Q.rear-Q.length)%m;i<(m+Q.rear-Q.length)%m+Q.length;i++) cout<<Q.sequ[i]<<" ";
    cout<<endl;
    return OK;
}
void main(){
    int a,e,i;
    InitQueue(Q);
    cout<<"请输入加入元素的个数:"<<endl;
    cin>>a;
    cout<<"请输入这些元素的值:"<<endl;
    for(i=0;i<a;i++){
        cin>>e;
        EnQueue(Q,e);
    }
    cout<<"现在的队列元素为:"<<endl;
    Put(Q);
    cout<<"请输入要删除的元素个数:"<<endl;
    cin>>a;
    cout<<"你现在删除的是:";
    for(i=0;i<a;i++){
        DeQueue(Q,e);
        cout<<e<<" ";
    }
    cout<<"现在的队列元素为:"<<endl;
    Put(Q);
}
搜索更多相关主题的帖子: 队列 归纳 int rear 
2007-12-19 10:39
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
1.rear >=fisrt 时 说明元素个数是rear-first
2.rear<first时,说明,rear转了一圈回到前面去了,所以元素个数就是Max -(first-rear),即Max+rear-first 故划为Max +(rear-first)

综合两点即位 (Max+(rear-first))%Max.

倚天照海花无数,流水高山心自知。
2007-12-19 14:23
Lupkid
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-10-18
收藏
得分:0 
不对啊,我这个是没有front指针的,还有一个问题想问下
请教一个关于归纳的问题
假设以数组sequ[m]存放循环队列的元素,同时设变量rear和quelen分别指示循环队列中队尾元素的位置和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队列算法中要返回队头元素)。

#include "iostream"
#include "stdlib.h"
#include "stdio.h"
#include "malloc.h"
#define OK 1
#define m 5
using namespace std;
typedef struct{
    int sequ[m];
    int length;
    int rear;
}SqQueue;
SqQueue Q;
int n;
int InitQueue(SqQueue &Q){
    Q.rear=0;
    Q.length=0;
    return OK;
}
int EnQueue(SqQueue &Q,int e){
    if(Q.length>=m){
        cout<<"error"<<endl;
        exit(0);
    }
    Q.sequ[Q.rear]=e;
    Q.rear=(Q.rear+1)%m;
    Q.length++;
    return OK;
}
int DeQueue(SqQueue &Q,int &e){
    if(Q.length<=0){
        cout<<"error"<<endl;
        exit(0);
    }
    e=Q.sequ[(m+Q.rear-Q.length)%m];//这条件怎么想出来的啊,我想了半天都想不到
    Q.length--;
    return OK;
}
int Put(SqQueue Q){
    int i;
    for(i=(m+Q.rear-Q.length)%m;i<(m+Q.rear-Q.length)%m+Q.length;i++) cout<<Q.sequ[i]<<" ";//这个更难想出来啊
    cout<<endl;
    return OK;
}
void main(){
    int a,e,i;
    InitQueue(Q);
    cout<<"请输入加入元素的个数:"<<endl;
    cin>>a;
    cout<<"请输入这些元素的值:"<<endl;
    for(i=0;i<a;i++){
        cin>>e;
        EnQueue(Q,e);
    }
    cout<<"现在的队列元素为:"<<endl;
    Put(Q);
    cout<<"请输入要删除的元素个数:"<<endl;
    cin>>a;
    cout<<"你现在删除的是:";
    for(i=0;i<a;i++){
        DeQueue(Q,e);
        cout<<e<<" ";
    }
    cout<<"现在的队列元素为:"<<endl;
    Put(Q);
}
2007-12-20 11:55
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
一样的性质.

倚天照海花无数,流水高山心自知。
2007-12-20 21:26
快速回复:请教一个关于归纳的问题
数据加载中...
 
   



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

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