请C语言版数据结构高手帮帮忙!
发布网友
发布时间:2023-08-07 04:55
我来回答
共3个回答
热心网友
时间:2023-09-10 23:38
//参照书本,经测试,此代码可以。使用了一维数组实现循环队列。
#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;
}
}
}
热心网友
时间:2023-09-10 23:39
我以前做过下面这个题目,现把题目和程序给你,希望对你有所帮助
一般队列用两个指针,头指针和尾指针
判断队空为 头指针=尾指针
判断队满为 尾指针+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"); }
}
}
热心网友
时间:2023-09-10 23:39
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;
}