翻转句子中单词的顺序(栈和队列)
时间: 1ms 内存:1000M
描述:
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”。
输入:
输入:
“I am a student.”
输出:
输出:
“student. a am I”
示例输入:
"You are unbreakable."
示例输出:
"unbreakable. are You"
提示:
参考答案(内存最优[752]):
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define SEN 100
struct sqstack
{
char *base;
char *top;
int size;
};
struct sqstack *initEmptyStack() /*构建空輚*/
{
struct sqstack *p;
p=(struct sqstack *)malloc(sizeof(struct sqstack));
if(p!=NULL)
{
p->base=(char *)malloc(sizeof(struct sqstack)*SEN);
if(p->base!=NULL)
{
p->top=p->base;
p->size=SEN;
return p;
}
}
else
free(p);
return NULL;
}
char push(struct sqstack *p,char a) /*入栈*/
{
*p->top++=a;
return 0;
}
char gettop(struct sqstack *p) /*取栈顶元素*/
{
if(p->base!=p->top)
return *(p->top-1);
return 0;
}
char pop(struct sqstack *p) /*出栈*/
{
return *(--p->top);
}
int main()
{
struct sqstack *p1,*p2;
char c;
p1=initEmptyStack();
p2=initEmptyStack();
while(scanf("%c",&c)!=EOF)
push(p1,c);
printf("%c",pop(p1));
while(p1->base!=p1->top)
{
while(gettop(p1)!=' '&&gettop(p1)!='\"')
push(p2,pop(p1));
while(p2->base!=p2->top)
printf("%c",pop(p2));
printf("%c",pop(p1));
}
printf("\n");
return 0;
}
参考答案(时间最优[0]):
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define SEN 100
struct sqstack
{
char *base;
char *top;
int size;
};
struct sqstack *initEmptyStack() /*构建空輚*/
{
struct sqstack *p;
p=(struct sqstack *)malloc(sizeof(struct sqstack));
if(p!=NULL)
{
p->base=(char *)malloc(sizeof(struct sqstack)*SEN);
if(p->base!=NULL)
{
p->top=p->base;
p->size=SEN;
return p;
}
}
else
free(p);
return NULL;
}
char push(struct sqstack *p,char a) /*入栈*/
{
*p->top++=a;
return 0;
}
char gettop(struct sqstack *p) /*取栈顶元素*/
{
if(p->base!=p->top)
return *(p->top-1);
return 0;
}
char pop(struct sqstack *p) /*出栈*/
{
return *(--p->top);
}
int main()
{
struct sqstack *p1,*p2;
char c;
p1=initEmptyStack();
p2=initEmptyStack();
while(scanf("%c",&c)!=EOF)
push(p1,c);
printf("%c",pop(p1));
while(p1->base!=p1->top)
{
while(gettop(p1)!=' '&&gettop(p1)!='\"')
push(p2,pop(p1));
while(p2->base!=p2->top)
printf("%c",pop(p2));
printf("%c",pop(p1));
}
printf("\n");
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。