请帮忙用c语言编写一个进栈、出栈、入队、退队、退队入栈、出栈入队的完整程序
答案:1 悬赏:70 手机版
解决时间 2021-03-01 12:43
- 提问者网友:藍了天白赴美
- 2021-03-01 09:54
请帮忙用c语言编写一个进栈、出栈、入队、退队、退队入栈、出栈入队的完整程序
最佳答案
- 五星知识达人网友:神也偏爱
- 2021-03-01 10:35
进栈 出栈的,队列和栈极其相似,恰好以前做了栈的括号匹配的,给你贴上了
#include
#include
#define LENGTH 20
typedef struct
{
char*top ;
char*base ;
int length ;
}sqstack ;
int check(sqstack*p,char c);
int initstack(sqstack*p);
int push(sqstack*p,char c);
char pop(sqstack*p);
int print(sqstack*p);
int main(void)
{
sqstack*p=NULL ;
char c ;
int i=1,flag ;
p=(sqstack*)malloc(sizeof(sqstack));
initstack(p);
while((c=getchar())!='\n')
{
flag=check(p,c);
if(flag==1)
push(p,c);
if(flag==0)
pop(p);
if(flag==-1)
{
printf("%dinput error\t",i);
i++;
}
}
print(p);
free(p->base);
free(p);
getchar();
return 1 ;
}
int check(sqstack*p,char c)
{
char ch=*(p->top-1);
if(c>='*'&&c<='Z'||c>='a'&&c<='z')
return 3 ;
else if(c=='('||c=='['||c=='{')
return 1 ;
else if((ch=='('&&c==')')||(ch=='['&&c==']')||(ch=='{'&&c=='}'))
return 0 ;
else
return-1 ;
}
int initstack(sqstack*p)
{
while(!(p->base=(char*)malloc((LENGTH)*sizeof(char))))
continue ;
p->top=p->base ;
p->length=0 ;
return 1 ;
}
int push(sqstack*p,char c)
{
if(p->length>=LENGTH)
{
p->base=(char*)realloc(p->base,(LENGTH*2)*sizeof(char));
p->top=p->base+p->length ;
}
*p->top++=c ;
p->length++;
return 1 ;
}
char pop(sqstack*p)
{
char m ;
if(p->top==p->base)
{
printf("error");
exit(0);
}
m=*--p->top ;
p->length--;
return m ;
}
int print(sqstack*p)
{
char*q,c ;
int i=0 ;
q=p->base ;
while(ilength)
{ c=*(q+i);printf(" ");
putchar(c);
i++;
}
return 1 ;
}
#include
#include
#define LENGTH 20
typedef struct
{
char*top ;
char*base ;
int length ;
}sqstack ;
int check(sqstack*p,char c);
int initstack(sqstack*p);
int push(sqstack*p,char c);
char pop(sqstack*p);
int print(sqstack*p);
int main(void)
{
sqstack*p=NULL ;
char c ;
int i=1,flag ;
p=(sqstack*)malloc(sizeof(sqstack));
initstack(p);
while((c=getchar())!='\n')
{
flag=check(p,c);
if(flag==1)
push(p,c);
if(flag==0)
pop(p);
if(flag==-1)
{
printf("%dinput error\t",i);
i++;
}
}
print(p);
free(p->base);
free(p);
getchar();
return 1 ;
}
int check(sqstack*p,char c)
{
char ch=*(p->top-1);
if(c>='*'&&c<='Z'||c>='a'&&c<='z')
return 3 ;
else if(c=='('||c=='['||c=='{')
return 1 ;
else if((ch=='('&&c==')')||(ch=='['&&c==']')||(ch=='{'&&c=='}'))
return 0 ;
else
return-1 ;
}
int initstack(sqstack*p)
{
while(!(p->base=(char*)malloc((LENGTH)*sizeof(char))))
continue ;
p->top=p->base ;
p->length=0 ;
return 1 ;
}
int push(sqstack*p,char c)
{
if(p->length>=LENGTH)
{
p->base=(char*)realloc(p->base,(LENGTH*2)*sizeof(char));
p->top=p->base+p->length ;
}
*p->top++=c ;
p->length++;
return 1 ;
}
char pop(sqstack*p)
{
char m ;
if(p->top==p->base)
{
printf("error");
exit(0);
}
m=*--p->top ;
p->length--;
return m ;
}
int print(sqstack*p)
{
char*q,c ;
int i=0 ;
q=p->base ;
while(i
{ c=*(q+i);printf(" ");
putchar(c);
i++;
}
return 1 ;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯