将一个字符串排序(串)

将一个字符串排序(串)

时间: 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;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注