#include
#include
#define OK 1
#define ERROR -1
#define OVERFLOW -2
#define INIT_QUEUE_SIZE 5//当前分配的最大空间
#define QUEUEINCREMENT 10
typedef int Status;
typedef float QElemType ;
typedef struct
{
QElemType* base;//初始化的动态分配存储空间
int front;
int rear;
}SqQueue;
//循环队列基本操作的算法实现
Status InitQueue_sq(SqQueue &Q)
{
Q.base = (QElemType*)malloc(INIT_QUEUE_SIZE*sizeof(QElemType));
if(!Q.base)
exit(OVERFLOW);//分配空间失败
Q.front = Q.rear =0;
return OK;
}
//插入元素
Status EnQueue_sq(SqQueue &Q,QElemType &e)
{
//插入新的元素
if((Q.rear +1)%INIT_QUEUE_SIZE ==Q.front )//空出来一个新的位置
{
printf("空间满了!!,正在开辟空间\n");
Q.base = (QElemType*)malloc((INIT_QUEUE_SIZE+QUEUEINCREMENT)*sizeof(QElemType));
Q.base [Q.rear ]=e;
Q.rear =(Q.rear ++)%INIT_QUEUE_SIZE;//没插入一个元素,rear就要加一;
}
else
{
Q.base [Q.rear ]=e;
Q.rear =( Q.rear +1)%INIT_QUEUE_SIZE;//没插入一个元素,rear就要加一;
}
return 0;
}
//删除元素.用e返回删除元素
Status DeQueue_sq(SqQueue &Q,QElemType &e)
{
if(Q.front =Q.rear )
{
printf("这是一个空的循环队列\n");
return ERROR;
}
e = Q.base [Q.front ];
Q.front =(Q.front +1)%INIT_QUEUE_SIZE;
return OK;
}
//输出数据的函数
void PrintQueue_sq(SqQueue Q)
{
int i;
if(Q.front ==Q.rear ) printf("空队列!\n");
else
{
i=Q.front;
while(i!=Q.rear)
{
printf("%d ",Q.base[i]);
i=(i+1)%INIT_QUEUE_SIZE;
}
printf("\n");
}
}
int main()
{
printf(" 对循坏队列的基本操作如下 \n ");
int num;//插入元素的个数
int j;//控制循环
QElemType elem;//元素
SqQueue Q;
//初始化
InitQueue_sq(Q);
//插入元素
printf("输入插入元素的个数:");
scanf("%d",&num);
printf("\n");
printf("输入需要插入的数据:");
for(j=0;j<num;j++)
{
scanf("%d",&elem);
EnQueue_sq(Q,elem );
}
printf("插入操作后循环队列中的数为:");
PrintQueue_sq(Q);//输出队列
//删除队列
printf("输入需要删除队列的元素个数::");
scanf("%d",&num);
printf("输出删除的额元素为:");
for(j = 0;j<num;j++)
{
DeQueue_sq(Q,elem);
printf("%d",elem);
}
printf("删除操作后循环队列中的数为:");
PrintQueue_sq(Q);
return 0;
}
提问题敢不敢认真点啊,这两坨代码是什么意思啊?布局也很让人不舒服啊噻
简单说下看出来的小问题:
1、既然队列满后可以开辟空间,那要INIT_QUEUE_SIZE就没意义了,开辟空间后,INIT_QUEUE_SIZE要相应加1的,可都定义了怎么改
2、如果输入5个元素,会进入死循环,不信你试试。在while(i!=Q.rear)这里判断时要分出这种情况
3、插入函数,函数调用是用引用,定义时参数要用指针,这样才能修改队列值啊亲
其他请原谅我实在看不下去了。。。
建议:照着别人能运行通的代码自己多写写,照着人家的练,出问题了还能有个对照,知道出在哪,要不然问题太多了,完全不知道怎么下手好了呢