주석 처리 된 줄의 문제점은 무엇입니까?"구조가 아닌 데이터 요소 요청"오류가 발생하는 이유는 무엇입니까?
#include<stdio.h>
typedef struct _stack
{
char data;
struct stack* next;
}stack;
int main()
{
char *s="4$2*3-3+8/4/(1+1)";
char * prefix= (char*) malloc(strlen(s+1));
convertinfixtoprefix(s,prefix);
int len=strlen(prefix);
int i;
for(i=0;i<len/2;i++)
{
char temp;
temp=prefix[i];
prefix[i]=prefix[len-i-1];
prefix[len-i-1]=prefix[i];
}
printf("The Prefix expression is %s",prefix);
}
void convertinfixtoprefix(char* infix,char*prefix)
{
stack *s=NULL;
int pr;
char c=NULL;
char d;
int i=strlen(infix)-1;
int index=0;
while(i>=0)
{
c=infix[i];
if(c==')')
{
push(&s,c);
}
else
if(c=='(')
{
while((d=pop(&s))!=')')
{
prefix[index]=d;
index++;
}
}
if((c!='+') && (c!='-') && (c!='*') && (c!='/') && (c!='$'))
{
prefix[index]=c;
index++;
}
else
{
pr=priority(d=pop(&s));
while(pr>priority(c))
{
prefix[index]=d;
index++;
pr=priority(d=pop(&s));
}
push(&s,c);
}
}
}
void push(stack** s,char c)
{
if(*s==NULL)
{
*s=(stack*)malloc(sizeof(stack));
((*s)->data)=c;// HERE ITS SHOWS ERROR WHY?
((*s)->next)=NULL;
}
else
{
stack* temp=(stack*)malloc(sizeof(stack));
temp->data=c;
temp->next=*s;
(*s)=temp;
}
}
char pop(stack**s)
{
if(*s==NULL)
printf("Stack khaali hai bhai\n");
else
{
char c=*s->data;
stack* temp=*s;
*s=*s->next;
free(temp);
return c;
}
return 0;
}
int priority(char c)
{
if(c=='+'||c=='-')
{ return 1;
}
else if(c=='*'||c=='/'||c=='%')
{ return 2;
}
else if(c=='$')
{
return 3;
}
}
코드를 포맷하십시오. –
대부분의 빈 줄이 아닌 코드를 읽기 쉽도록 만들고 여러 구역으로 분할되지 않도록하는 것이 좋습니다. – morphles
그리고 malloc 캐스트를 제거하고 stdlib.h에서 프로토 타입을 가져옵니다. – user611775