永发信息网

数据结构(使用C语言)队列

答案:2  悬赏:0  手机版
解决时间 2021-02-09 02:35
  • 提问者网友:两耳就是菩提
  • 2021-02-08 06:37
对顺序循环队列,常规的设计方法是使用队尾指针和队头指针,队尾指针用于指出当前胡队尾位置下标,队头指针用于指示当前队头位置下标。现要求:
(1)设计一个使用队头指针和计数器胡顺序循环循环队列抽象数据类型,其中包括:初始化,入队列,出队列,取队头元素肯判断队列是否非空;
(2)编写一个主函数进行测试
最佳答案
  • 五星知识达人网友:罪歌
  • 2021-02-08 06:54
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
#include "conio.h"
#define MAX 80
typedef struct
{
int data[MAX];
int front,rear;
int num;
}SeQue;
SeQue *Init_SeQue()
{
SeQue *s;
s=new SeQue;
s->front=s->rear=MAX-1;
s->num=0;
return s;
}
int Empty_SeQue(SeQue *s)
{
if(s->num==0)
return 1;
else
return 0;
}
int In_SeQue(SeQue *s,int x)
{
if(s->num==MAX)
return 0;
else
{
s->rear=(s->rear+1)%MAX;
s->data[s->rear]=x;
s->num++;
return 1;
}
}
int Out_SeQue(SeQue *s,int *x)
{
if(Empty_SeQue(s))
return 0;
else
{
s->front=(s->front+1)%MAX;
*x=s->data[s->front];
s->num--;
return 1;
}
}
void Print_SeQue(SeQue *s)
{
int i,n;
i=(s->front+1)%MAX;
n=s->num;
while(n>0)
{ printf("%d ",s->data[i]);
i=(i+1)%MAX;
n--;
}
}
void main()
{
SeQue *s;
int k,flag,x;
s=Init_SeQue();
do{
printf("\n\n\n");
printf("\t\t\t 循环顺序队列\n");
printf("\t\t\t***********************\n");
printf("\t\t\t** 1-入 队 **\n");
printf("\t\t\t** 2-出 队 **\n");
printf("\t\t\t** 3-判 队 空 **\n");
printf("\t\t\t** 4-队列显示 **\n");
printf("\t\t\t** 0-返 回 **\n");
printf("\t\t\t***********************\n");
printf("\t\t\t 请输入菜单项(0-4):");
scanf("%d",&k);
switch(k)
{
case 1:
printf("\n请输入入队元素:");
scanf("%d",&x);
flag=In_SeQue(s,x);
if(flag==0)
printf("\n队满不能入队!按任意键返回..");
else
printf("\n元素已入队!按任意键返回..");
getch();
system("cls");
break;
case 2:
flag=Out_SeQue(s,&x);
if(flag==0)
printf("\n队列空出队失败!按任意键返回..");
else
printf("\n队列头元素已出队~!按任意键返回..");
getch();
system("cls");
break;
case 3:
flag=Empty_SeQue(s);
if(flag==1)
printf("\n该队列为空!按任意键返回..");
else
printf("\n该队列不为空!按任意键返回..");
getch();
system("cls");
break;
case 4:
printf("\n该队列元素为:");
Print_SeQue(s);
printf("\n按任意键返回..");
getch();
system("cls");
break;
}
}while(k!=0);
}
全部回答
  • 1楼网友:轮獄道
  • 2021-02-08 07:57
对顺序循环队列,常规的设计方法是使用队尾指针和队头指针,队尾指针用于指出当前胡队尾位置下标,队头指针用于指示当前队头位置下标。现要求: (1)设计一个使用队头指针和计数器胡顺序循环循环队列抽象数据类型,其中包括:初始化,入队列,出队列,取队头元素肯判断队列是否非空; #include "stdio.h" #include "malloc.h" #include "stdlib.h" #include "conio.h" #define MAX 80 typedef struct { int data[MAX]; int front,rear; int num; }SeQue; SeQue *Init_SeQue() { SeQue *s; s=new SeQue; s->front=s->rear=MAX-1; s->num=0; return s; } int Empty_SeQue(SeQue *s) { if(s->num==0) return 1; else return 0; } int In_SeQue(SeQue *s,int x) { if(s->num==MAX) return 0; else {  s->rear=(s->rear+1)%MAX; s->data[s->rear]=x; s->num++; return 1; }  }  int Out_SeQue(SeQue *s,int *x) { if(Empty_SeQue(s)) return 0; else { s->front=(s->front+1)%MAX; *x=s->data[s->front]; s->num--; return 1; } } void Print_SeQue(SeQue *s) { int i,n; i=(s->front+1)%MAX; n=s->num; while(n>0) { printf("%d ",s->data[i]); i=(i+1)%MAX; n--; } } void main() { SeQue *s; int k,flag,x; s=Init_SeQue(); do{ printf("\\\"); printf("\\t\\t\\t循环顺序队列\"); printf("\\t\\t\\t***********************\"); printf("\\t\\t\\t**1-入队**\"); printf("\\t\\t\\t**2-出队**\"); printf("\\t\\t\\t**3-判 队 空**\"); printf("\\t\\t\\t**4-队列显示**\"); printf("\\t\\t\\t**0-返回**\"); printf("\\t\\t\\t***********************\"); printf("\\t\\t\\t 请输入菜单项(0-4):"); scanf("%d",&k); switch(k) { case 1: printf("\请输入入队元素:"); scanf("%d",&x); flag=In_SeQue(s,x); if(flag==0) printf("\队满不能入队!按任意键返回.."); else printf("\元素已入队!按任意键返回.."); getch(); system("cls"); break; case 2: flag=Out_SeQue(s,&x); if(flag==0) printf("\队列空出队失败!按任意键返回.."); else printf("\队列头元素已出队~!按任意键返回.."); getch(); system("cls"); break; case 3: flag=Empty_SeQue(s); if(flag==1) printf("\该队列为空!按任意键返回.."); else printf("\该队列不为空!按任意键返回.."); getch(); system("cls"); break; case 4: printf("\该队列元素为:"); Print_SeQue(s); printf("\按任意键返回.."); getch(); system("cls"); break; } }while(k!=0); }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯