将一个字符串排序(串)
时间: 1ms 内存:128M
描述:
输入一个字符串,可以包含任何字符,将其从小到大排序后输出
输入:
输入一个字符串
输出:
输出排序后的字符串
示例输入:
adf1ad45
示例输出:
145aaddf
提示:
参考答案(内存最优[752]):
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define SEN 100
struct sqstack
{
char *base;
char *top;
char 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;
}
int 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()
{
int t1=0,t2;
char min,m,a;
struct sqstack *p1,*p2;
p1=initEmptyStack();
p2=initEmptyStack();
while(scanf("%c",&m)!=EOF)
{
push(p1,m);
t1++;
}
while(t1--)
{
t2=0;
min=gettop(p1);
{
while(p1->base!=p1->top)
{
a=pop(p1);
if(a<min)
min=a;
push(p2,a);
}
while(p2->base!=p2->top)
{
a=pop(p2);
if(a==min)
{
t2++;
}
else
push(p1,a);
}
while(t2--)
printf("%c",min);
}
}
printf("\n");
return 0;
}
参考答案(时间最优[0]):
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define SEN 100
struct sqstack
{
char *base;
char *top;
char 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;
}
int 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()
{
int t1=0,t2;
char min,m,a;
struct sqstack *p1,*p2;
p1=initEmptyStack();
p2=initEmptyStack();
while(scanf("%c",&m)!=EOF)
{
push(p1,m);
t1++;
}
while(t1--)
{
t2=0;
min=gettop(p1);
{
while(p1->base!=p1->top)
{
a=pop(p1);
if(a<min)
min=a;
push(p2,a);
}
while(p2->base!=p2->top)
{
a=pop(p2);
if(a==min)
{
t2++;
}
else
push(p1,a);
}
while(t2--)
printf("%c",min);
}
}
printf("\n");
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。
