请C语言版数据结构高手帮帮忙!

假设以一维数组来存储循环队列的元素,同时设变量rear和qlen分别指示循环队列中队尾元素位置和队列元素个数。试给出此循环队列的判队空、判队满函数,并写出相应的入队和出队... 假设以一维数组来存储循环队列的元素,同时设变量rear和qlen分别指示循环队列中队尾元素位置和队列元素个数。试给出此循环队列的判队空、判队满函数,并写出相应的入队和出队算法。 展开
 我来答
hjflyblue
2010-12-28 · TA获得超过306个赞
知道小有建树答主
回答量:169
采纳率:0%
帮助的人:158万
展开全部
//参照书本,经测试,此代码可以。使用了一维数组实现循环队列。
#include<stdio.h>
#define MaxSize 10 //预设队列大小
int queue[MaxSize];
int front=0,rear=0; //队列头,队列尾
int qlen=0;

//判断是否队空
bool isEmpty()
{
if(front==rear)return true;
return false;
}

//判断是否队满
bool isFull()
{
if(qlen==MaxSize-1)return true;
return false;
}

void EnQueue() //进队列
{
if(isFull()==true)
{
printf("队列满了");
return ;
}
printf("输入进入队列的元素:");

scanf("%d",&queue[rear]);
rear=(rear+1)%MaxSize;
qlen++;//长度增加
}
void DeQueue() //出队列
{
if(isEmpty()==true)
{
printf("队列为空!\n");
return;
}
printf("出队列的元素:%d",queue[front]);
front=(front+1)%MaxSize;
qlen--;//长度减少
}

void print() //打印当前队列
{
int i;
if(qlen==0)
{
printf("队列为空!\n");
return;
}
printf("\n当前队列为:");
if(front>rear)
{
for(i=front-1;i<MaxSize;i++)
{
printf("%d ",queue[i]);
}
for(i=0;i<rear;i++)
{
printf("%d ",queue[i]);
}
}
else
{
for(i=front;i<rear;i++)
{
printf("%d ",queue[i]);
}
}

}
int main()
{
int servse=-1; //服务标识
while(servse!=0)
{
printf("\n1.元素进队\n");
printf("2.元素出列\n");
printf("3.打印队列\n");
printf("0.退出\n");
printf("选择:");
scanf("%d",&servse);
switch(servse)
{
case 1:EnQueue();break;
case 2:DeQueue();break;
case 3:print();break;
case 0:break;
}
}
}
mdoom
2010-12-28 · TA获得超过2921个赞
知道大有可为答主
回答量:1370
采纳率:0%
帮助的人:671万
展开全部
我以前做过下面这个题目,现把题目和程序给你,希望对你有所帮助
一般队列用两个指针,头指针和尾指针
判断队空为 头指针=尾指针
判断队满为 尾指针+1-头指针>len
【问题描述】
请设计一个程序模拟队列,具备初始队列、入队、出队、输出队列数据的功能。
【输入】
输入由若干行组成,每行表示一种操作。每行由一个或两个整数组成,其中第一个整数代表操作的类型:1表示初始队列操作,2表示入队操作,3表示出队操作、4表示输出队列信息,第二个整数表示操作所涉及的数据。
初始队列操作:将队列置为空并重新设置队列容量。该行第二个整数设为队列的容量。
入队操作:将该行第二个整数入队,如队列中元素个数超过队列容量则输出“Full OV”。
出队操作:正常删除队首元素,如果队列中已无任何元素,则输出“Empty OV”。
输出操作:按从队首到队尾的顺序输出队内所有元素,空队列输出“Empty”。
【输出】
根据不同的操作,输出不同的操作信息。
初始队列操作无输出信息。入队、出队如有错则输出出错信息,否则无输出信息。输出操作按从队首到队尾的顺序输出队内所有元素(元素之间用一个空格隔开)。
样例】
输入
1 2
3
2 78
2 88
2 99
3
4
3
4
2 99
4
输出
Empty OV
Full OV
88
Empty
99

程序如下
#include <stdio.h>
#include <time.h>
void main()
{int op,n,len,i,head,tail;
int a[10000]={0};
head=0;tail=0;len=0;
while(scanf("%d",&op)!=EOF)
{;
if(op==1)
{head=0;
tail=0;
scanf("%d",&n);
len=n;
}
if(op==2)
{scanf("%d",&n);
if(tail+1-head>len)printf("Full OV");
else{tail=tail+1;a[tail]=n;}
}
if(op==3)
if(head==tail)printf("Empty OV");
else head=head+1;
if(op==4)
if(head==tail)printf("Empty");
else
{for(i=head+1;i<=tail;i++)printf("%d ",a[i]);
printf("\n"); }
}

}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友df283d6
2010-12-28 · 超过28用户采纳过TA的回答
知道答主
回答量:81
采纳率:100%
帮助的人:26.5万
展开全部
typedef struct queue
{ int rear;
int front;
int MaxLen;
} ;
//判断队空
bool isEmpty(queue *q)
{
if(q->rear==q->front==0)
{cout<<"队列空";
return 1;
}
else return 0;
}
void isFull(queue *q)
{
if((q->rear+1)%MaxLen==q->front)
cout<<"队列满"; return 1;
}
else return 0;
}
void enQueue(queue *q, datatyped data)
{ if(isFull(q))
return false;
else
q-->base[q->rear]=data;
q-rear=(q->rear+1)%MaxLen;
}
void outQueue(queue *q)
{ if(isEmpty(q))
return false;
else
q->front=(q->front+1)%MaxLen;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式