求帮忙看看这个错误怎么改,在线等
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#define MAX_SIZE 20//定义循环队列的长度
typedef struct{ //初始化的动态分配存储空间
char*base;
char front;
char rear;
int full;//队列是否已满的标志位
int length;
}Queue;
int creat_queue(Queue*q) //初始化队列
{ if (q->base!=NULL)//队列已经存在,要先销毁
return 0;
q->base=(char*)malloc(MAX_SIZE*sizeof(char));
q->front=q->rear=0;
q->full=0;
q->length=0;
return 1;
}
int en_queue(Queue*q,char e) //入队
{ if(q->base==NULL)
return -1;//是队列不存在
else if(q->full==1&&q->front==q->rear)
return 0;//入队前考虑队列是否满了
else {
q->base[q->rear]=e;
q->rear=(q->rear+1)%MAX_SIZE;//实现循环,如果rear+1满了并不是真正的满了,可以循环
if(q->front==q->rear)
q->full=1;
return 1;}
}
int out_queue(Queue*q,int*e)
{ if(q->base==NULL)
return -1;//是队列不存在
if(q->full==0&&q->front==q->rear)
return 0; //出队前考虑队列是否为空
else {
*e=q->base[q->front];
q->front=(q->front+1)%MAX_SIZE;//修改front位置
if(q->front==q->rear)
q->full=0;//如果出队后两位置相同则队为空了
return 1;
}
void main(){
Queue q;
int i,a1,a2,a3,a4;
char e,k=NULL;
char *e1,*e2;
q.base=NULL;
e1=e2=&k;//对于指针最好这样初始化定义一下,因为只声明是没有分陪内存的,不能直接用*e
a1=creat_queue(&q); //初始化队列
if(a1==1){
printf("已初始化队列!");
}else{
printf("初始化失败!");
}
for(i=0;i<11;i++){//依次进队列e,n,g,i,n,e,e,r,i,n,g;
printf("请输入第%d个字符",i+1);
scanf("%c",&e);
getchar();
a2=en_queue(&q,e);
if(a2==-1)
printf("队列不存在!\n");break;
else if(a2==0)
printf("队列已满!\n");break;
else{
printf("已入队!\n");
q->length++;
}
}
a3=out_queue(&q,e1);//出队一个元素,输出该元素;
if(a3==-1)
{
printf("队列不存在,请先创建队列!\n");
} else if(a3==0){
printf("出队失败!因为队列为空!\n");
}else{
printf("OK!出队成功");
printf("出队元素为:%d\n",*e1);
q->length--;
}
printf("队列q的元素个数为:%d",q->length); //输出队列q的元素个数;
for(i=0;i<3;i++){//依次进队列元素d,e,f;
printf("请输入第%d个字符",i+1);
scanf("%c",&e);
getchar();
a2=en_queue(&q,e);
if(a2==-1)
printf("队列不存在!\n");break;
else if(a2==0)
printf("队列已满!\n");break;
else{
printf("已入队!\n");
q->length++;
}
}
printf("队列q的元素个数为:%d",q->length); //输出队列q的元素个数;
for(i=0;i<13;i++){//输出出队序列;
out_queue(&q,e1);
printf("%d:%c\n",i+1,*e1);
q->length--;
}
}
free(q->base); //释放队列
q->base=NULL;
}
编译时出错:error C2601: 'main' : local function definitions are illegal
请问怎么改 c
[解决办法]
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#define MAX_SIZE 20//定义循环队列的长度
typedef struct{ //初始化的动态分配存储空间
char*base;
char front;
char rear;
int full;//队列是否已满的标志位
int length;
}Queue;
int creat_queue(Queue*q) //初始化队列
{ if (q->base!=NULL)//队列已经存在,要先销毁
return 0;
q->base=(char*)malloc(MAX_SIZE*sizeof(char));
q->front=q->rear=0;
q->full=0;
q->length=0;
return 1;
}
int en_queue(Queue*q,char e) //入队
{ if(q->base==NULL)
return -1;//是队列不存在
else if(q->full==1&&q->front==q->rear)
return 0;//入队前考虑队列是否满了
else {
q->base[q->rear]=e;
q->rear=(q->rear+1)%MAX_SIZE;//实现循环,如果rear+1满了并不是真正的满了,可以循环
if(q->front==q->rear)
q->full=1;
return 1;}
}
int out_queue(Queue*q,int*e)
{ if(q->base==NULL)
return -1;//是队列不存在
if(q->full==0&&q->front==q->rear)
return 0; //出队前考虑队列是否为空
else {
*e=q->base[q->front];
q->front=(q->front+1)%MAX_SIZE;//修改front位置
if(q->front==q->rear)
q->full=0;//如果出队后两位置相同则队为空了
return 1;
}
}
int main(){
Queue q;
int i,a1,a2,a3,a4;
char e,k=NULL;
char *e1,*e2;
q.base=NULL;
e1=e2=&k;//对于指针最好这样初始化定义一下,因为只声明是没有分陪内存的,不能直接用*e
a1=creat_queue(&q); //初始化队列
if(a1==1){
printf("已初始化队列!");
}else{
printf("初始化失败!");
}
for(i=0;i<11;i++){ //依次进队列e,n,g,i,n,e,e,r,i,n,g;
printf("请输入第%d个字符",i+1);
scanf("%c",&e);
getchar();
a2=en_queue(&q,e);
if(a2==-1){
printf("队列不存在!\n");break;
}
else if(a2==0){
printf("队列已满!\n");break;
}
else{
printf("已入队!\n");
q.length++;
}
}
a3=out_queue(&q,e1); //出队一个元素,输出该元素;
if(a3==-1)
{
printf("队列不存在,请先创建队列!\n");
} else if(a3==0){
printf("出队失败!因为队列为空!\n");
}else{
printf("OK!出队成功");
printf("出队元素为:%d\n",*e1);
q.length--;
}
printf("队列q的元素个数为:%d",q.length); //输出队列q的元素个数;
for(i=0;i<3;i++){ //依次进队列元素d,e,f;
printf("请输入第%d个字符",i+1);
scanf("%c",&e);
getchar();
a2=en_queue(&q,e);
if(a2==-1)
printf("队列不存在!\n");
else if(a2==0){
printf("队列已满!\n");
}
else{
printf("已入队!\n");
q.length++;
}
}
printf("队列q的元素个数为:%d",q.length); //输出队列q的元素个数;
for(i=0;i<13;i++){ //输出出队序列;
out_queue(&q,e1);
printf("%d:%c\n",i+1,*e1);
q.length--;
}
free(q.base); //释放队列
q.base=NULL;
return 0;
}
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#define MAX_SIZE 20//定义循环队列的长度
typedef struct{ //初始化的动态分配存储空间
char*base;
char front;
char rear;
int full;//队列是否已满的标志位
int length;
}Queue;
int creat_queue(Queue*q) //初始化队列
{ if (q->base!=NULL)//队列已经存在,要先销毁
return 0;
q->base=(char*)malloc(MAX_SIZE*sizeof(char));
q->front=q->rear=0;
q->full=0;
q->length=0;
return 1;
}
int en_queue(Queue*q,char e) //入队
{
if(q->base==NULL)
return -1;//是队列不存在
else if(q->full==1&&q->front==q->rear)
return 0;//入队前考虑队列是否满了
else {
q->base[q->rear]=e;
q->rear=(q->rear+1)%MAX_SIZE;//实现循环,如果rear+1满了并不是真正的满了,可以循环
if(q->front==q->rear)
q->full=1;
return 1;
}
}
int out_queue(Queue*q,char* e)
{
if(q->base==NULL)
return -1;//是队列不存在
if(q->full==0&&q->front==q->rear)
return 0; //出队前考虑队列是否为空
else {
*e=q->base[q->front];
q->front=(q->front+1)%MAX_SIZE;//修改front位置
if(q->front==q->rear)
q->full=0;//如果出队后两位置相同则队为空了
return 1;
}
}
int main()
{
Queue q;
int i,a1,a2,a3,a4;
char e,k=NULL;
char *e1,*e2;
q.base=NULL;
e1=e2=&k;//对于指针最好这样初始化定义一下,因为只声明是没有分陪内存的,不能直接用*e
a1=creat_queue(&q); //初始化队列
if(a1==1){
printf("已初始化队列!");
}else{
printf("初始化失败!");
}
for(i=0;i<11;i++){ //依次进队列e,n,g,i,n,e,e,r,i,n,g;
printf("请输入第%d个字符",i+1);
scanf("%c",&e);
getchar();
a2=en_queue(&q,e);
if(a2==-1)
{
printf("队列不存在!\n");
break;
}
else if(a2==0)
{
printf("队列已满!\n");
break;
}
else
{
printf("已入队!\n");
q.length++;
}
}
a3=out_queue(&q,e1); //出队一个元素,输出该元素;
if(a3==-1)
{
printf("队列不存在,请先创建队列!\n");
} else if(a3==0){
printf("出队失败!因为队列为空!\n");
}else{
printf("OK!出队成功");
printf("出队元素为:%d\n",*e1);
q.length--;
}
printf("队列q的元素个数为:%d",q.length); //输出队列q的元素个数;
for(i=0;i<3;i++){ //依次进队列元素d,e,f;
printf("请输入第%d个字符",i+1);
scanf("%c",&e);
getchar();
a2=en_queue(&q,e);
if(a2==-1)
{
printf("队列不存在!\n");
break;
}
else if(a2==0)
{
printf("队列已满!\n");
break;
}
else{
printf("已入队!\n");
q.length++;
}
}
printf("队列q的元素个数为:%d",q.length); //输出队列q的元素个数;
for(i=0;i<13;i++){ //输出出队序列;
out_queue(&q,e1);
printf("%d:%c\n",i+1,*e1);
q.length--;
}
free(q.base); //释放队列
q.base=NULL;
}