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;
}
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;
}
相关文章推荐
- 一个用VB实现的对任意字符串进行排列并排序的函数
- java实现对一个字符串中的数值进行从小到大的排序
- 3.7 按升序对一个字符串栈进行排序
- 3. 编写一个C程序,实现对10个整数进行升序排序输出。
- java 数据装箱及练习-对一个字符串中的数字进行排序
- 定义一个一维数组,其元素个数从键盘中输入,元素的值为[100,200]的随机整数。 (1)输出数组的每个数 (2)对数组的数进行升序排序,输出排序后的数组元素 (3)从键盘上输入一个整数,查找该整数是
- 已知字母序列【d, g, e, c, f, b, o, a】,请实现一个函数针对输入的一组字符串 input[] = {"bed", "dog", "dear", "eye"},按照字母顺序排序并打印
- java字符串数组进行大小排序的简单实现
- C#实现将一个字符串进行翻转显示的6种方法
- 大顶堆进行升序排序的python实现
- 【Python】简单例题tuple和list的转换;实现删除一个list里重复的元素;对list a进行排序,并且从最后一个开始删除重复元素
- 分治算法实现对一个数进行字典全排序
- 实现一个算法,对公司员工年龄进行排序,时间效率要求O(n)
- 从键盘输入一个字符串,按照字符顺序从小到大进行排序,并要求删除重复的的字符。
- TreeSet是可以对字符串进行排序 的, 因为字符串已经实现了Comparable接口。
- java基础—自定义一个比较器,按照字符串的长度升序的方法来比较字符串进行储存(java集合三)
- 实现List按与一个字符串的相似度和字母顺序排序(适用于模糊查询后的排序)
- 对一个存储学生信息的单向链表,按照学号升序对链表进行排序,每个节点包含了一个学生ID
- 分治算法实现对一个数进行字典全排序
- Java 对一个带空格的字符串进行排序