您的位置:首页 > 理论基础 > 数据结构算法

3.11 用栈实现对一个字符串按升序进行排序

2018-02-08 14:51 330 查看
算法阐述:
voidStackSort(SqStack *&st)
{
       需要的对象有:一个临时栈tmpst,2个用于比较的栈顶元素e,ep,从st出栈的栈顶元素放到e,从tmpst出栈的栈顶元素放到ep。
       SqStack *tmpst;
       ElemType e,ep;
       InitStack(tmpst);
       使得st栈中元素不断的出栈后进栈到tmpst,最终使得tmpst栈从底到顶为升序
       while(!StackEmpty(st)){
       st出栈
       Pop(st,e);
       tmpst栈不空下循环进行出栈、2个栈顶元素比较大小、若st栈顶元素比tmpst栈顶元素小,则tmpst栈顶元素进栈st、st栈顶元素再与tmpst新栈顶元素比较大小、若st栈顶元素比tmpst栈顶元素大,则break
       while(!StackEmpty(tmpst))
{
GetTop(tmpst,ep);
if(e<ep)
{
Pop(tmpst,ep);
Push(st,ep);
else
       break;
}
}

       st栈顶元素e大于tmpst栈顶元素ep,则e直接进栈tmpst.
       Push(tmpst,e);
}
       循环执行tmpst 元素出栈到e、进栈到st
       while((!StackEmpty(tmpst))
       {
Pop(tmpst,ep);
Push(st,ep);
}        

}

完整代码:

#include"sqstack.cpp"
void StackSort(SqStack *&st)
{
SqStack *tmpst;
InitStack(tmpst);
ElemType e,ep;
while(!StackEmpty(st))
{
Pop(st,e);
while(!StackEmpty(tmpst))
{
GetTop(tmpst,ep);
if(ep>e)
{
Pop(tmpst,ep);
Push(st,ep);
}
else
break;

}
Push(tmpst,e);
}
while(!StackEmpty(tmpst))
{
Pop(tmpst,ep);
Push(st,ep);
}
DestroyStack(tmpst);
}

int main()
{
ElemType e;
SqStack *s;
InitStack(s);
printf(" (1)依次进栈元素 1,3,4,2\n");
Push(s,'1');
Push(s,'3');
Push(s,'4');
Push(s,'2');
StackSort(s);
printf(" (2)s的出栈序列:");
while(!StackEmpty(s))
{
Pop(s,e);
printf("%c ",e);
}
printf("\n");
DestroyStack(s);
return 1;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐