#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAXSIZE 100 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define INFEASIBLE -1 typedef struct {/* 栈类定义 */ char data[MAXSIZE]; int top; }SqStack; typedef struct { /* 队列类定义 */ char data[MAXSIZE]; int front;/* 队首指针 */ int rear;/* 队尾指针 */ }SqQueue; void InitSqStack(SqStack *s) { /* 初始化栈,将栈置空 */ s->top=0; /* 令top为0表示栈为空 */ } void InitSqQueue(SqQueue *q) {/* 初始化循环队列,将队列置为空 */ q=(SqQueue *)malloc(sizeof(SqQueue));/* 分配队列的存储空间 */ q->front=q->rear=0;/* 令front为0 */ } int PushStack(SqStack *s,char e) { /* 将元素e压入到栈S中 */ if(s->top==MAXSIZE)/* 栈满则操作失败 */ return 0; s->data[s->top]=e; s->top++; return 1; } int PushSqQueue(SqQueue *q,char e) {/* 将元素e压入到队列Q中 */ if(q->front==(q->rear+1)%MAXSIZE) /* 队列满则操作失败 */ return 0; q->data[q->rear]=e; q->rear=(q->rear+1)%MAXSIZE; return 1; } int PopStack(SqStack *s,char *e) {/* 将栈S中的栈顶元素出栈 */ if(s->top==0) /* 栈空则操作失败 */ return 0; s->top--; *e=s->data[s->top]; return 1; } int PopQueue(SqQueue *q,char *e) { /* 将队列Q中的队首元素删除 */ if(q->front==q->rear) /* 队列空则操作失败 */ return 0; *e=q->data[q->front]; q->front=(q->front+1)%MAXSIZE; return 1; } void Print(SqStack *s){ while(s->top!=0){ char x; PopStack(s,&x); printf("%c",x); } } void EditString(){ SqStack s; InitSqStack(&s); char c; while((c=getchar())!='\n'){ if(c=='#'){ char x; PopStack(&s,&x); } else if(c=='@'){ InitSqStack(&s); } else{ PushStack(&s,c); } } Print(&s); } void ReadString() { SqQueue q; InitSqQueue(&q); char c; while((c=getchar())!='\n'){ PushSqQueue(&q,c); } while(q.front!=q.rear){ char x; PopQueue(&q,&x); printf("%c",x); } } int main() { EditString(); ReadString(); return 0; } 为什么这个代码的队列没有运行出来
时间: 2024-02-22 10:59:33 浏览: 74
StudentInformation
在函数`InitSqQueue`中,参数`q`是一个指针,需要用`malloc`函数为其分配内存空间。因此,需要将`q`改为指向指针的指针,或者将函数返回分配的指针。同时,需要在函数结束时释放内存空间。可以将函数修改为:
```
int InitSqQueue(SqQueue **q) {
*q = (SqQueue*)malloc(sizeof(SqQueue));
if (*q == NULL) {
return ERROR;
}
(*q)->front = (*q)->rear = 0;
return OK;
}
```
在主函数中,需要将队列的初始化改为:
```
SqQueue *q;
if (InitSqQueue(&q) == ERROR) {
return ERROR;
}
```
同时,在程序结束时需要释放内存空间:
```
free(q);
```
阅读全文