数据结构(C语言版) 栈和队列 算法设计Demo11

Posted 奕兴_Victor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构(C语言版) 栈和队列 算法设计Demo11相关的知识,希望对你有一定的参考价值。

设计一个算法实现对栈取最小值的操作min函数,要求时间复杂度O(1)。

[算法分析]

将之前的最小值与新压入栈的元素两者的值进行比较,把每次较小的元素都保存在另一个辅助栈中。这样可以保证即使最小值出栈之后也可以找到次小的其他值。用两个栈来实现,栈sData存放入栈元素,栈sMin存放最小值。

[算法描述]

#define MaxSize 50
Typedef struct
	Elemtype data[MaxSize];
	int top;
Stack;

Stack sData,sMin;	// 入栈

void Push(Elemtype data)	// 第一个元素同时压入两个栈
	if(sData.empty())
		push(sMin,data);
	else
		if(data<sMin.top())
			push(sData,data);
			push(sMin,data);
		else
			push(sData,data);
		
	


void Pop()	// 栈顶元素相等同时出栈
	if(top(sMin)==top(sData))
		pop(sData);
		pop(sMin);
	else
		pop(sData);
	


Elemtype min()
	return top(sMin);

以上是关于数据结构(C语言版) 栈和队列 算法设计Demo11的主要内容,如果未能解决你的问题,请参考以下文章

数据结构(C语言版) 栈和队列 算法设计Demo14

数据结构(C语言版) 栈和队列 算法设计Demo9

数据结构(C语言版) 栈和队列 算法设计Demo8

数据结构(C语言版) 栈和队列 算法设计Demo13

数据结构(C语言版) 栈和队列 算法设计Demo10

数据结构(C语言版) 栈和队列 算法设计Demo12