最小栈与最大栈问题(自己思路)

按照自己的思路实现的,但是不知道对不对,目前测试的几组数据是正确的~欢迎大佬们指正

//最小栈问题-----最大栈问题
#include
#include"linklist.h"
#include"LinkStack.h"
#include
#include
#include
#include
#include
#include
#define MAX 100
#define MIN 1
#define SEPARTRIX 0
int MinusValue(int SecondTop, int Top)
{
	return SecondTop - Top;
};
int GetMin(LinkStack* Data, LinkStack* MinStack)
{
	int num_1, FinalResult,MiniValue,MaxValue=0;
	num_1 = *((int*)SeqStack_Pop(Data));/*弹出栈顶元素*/
	MiniValue = *((int*)SeqStack_Pop(Data));/*弹出次栈顶元素*/
	/*第一轮计算*/
	int result = MinusValue(MiniValue, num_1);
	if (result>0)
	{
		MaxValue = MiniValue;
		MiniValue = num_1;
		
	}
	else
	{
		int* tmpnum_1 = NULL;
		tmpnum_1 = (int*)malloc(sizeof(int));
		*tmpnum_1 = result;
		SeqStack_Push(MinStack, (void*)tmpnum_1);
		MaxValue = num_1;
	}
	/*此时可能存在MinStack为空的风险*/
	while (SeqStack_Size(Data)>0)
	{
		num_1 = *((int*)SeqStack_Pop(Data));
		result = MinusValue(MiniValue, num_1);
		/*判断MinStack栈顶元素是否为空*/
		if (SeqStack_Size(MinStack)>0/*非空*/)
		{
			if (result>0)
			{
				MiniValue = result > SEPARTRIX ? num_1 : MiniValue;
			}
			int* tmpnum = (int*)(SeqStack_Top(MinStack));
			result = result < (*tmpnum) ? result : *(tmpnum);
			if (result != (*tmpnum))//result==result
			{
				SeqStack_Pop(MinStack);
				int* tmpnum_1 = NULL;
				tmpnum_1 = (int*)malloc(sizeof(int));
				*tmpnum_1 = result;
				MaxValue = MaxValue > num_1 ? MaxValue : num_1;
				SeqStack_Push(MinStack, (void*)tmpnum_1);
			}
		}
		else
		{
			if (result<SEPARTRIX)
			{
				SeqStack_Push(MinStack, result);
				MaxValue = MaxValue > num_1 ? MaxValue : num_1;
			}
			else
			{
				MiniValue = num_1;
				MaxValue = MaxValue > num_1 ? MaxValue : num_1;
			}
		}
	}
	printf("最小值为:%d\n,最大值为:%d\n", MiniValue,MaxValue);
};
int GetMax(LinkStack* Data, LinkStack* MinStack)
{

}
int main(void)
{
	/*播种使得每次编译器生成的随机数不同*/
	//srand((unsigned int)time(NULL));
	LinkStack* MinStack = NULL;
	LinkStack* StoreData = NULL;
	StoreData = SeqStack_Create();
	MinStack = SeqStack_Create();
	int tmpNum = 0;
	int resultMin = 0;
	int arr[6] = { 1, 5, 2, 10, 2, 3 };
	for (int i = 0; i < 6; i++)
	{
		SeqStack_Push(StoreData,(void*)(&arr[i]));/*将数据存放在StoreData中*/
	}
	/*实现求解最小栈*/
	resultMin = GetMin(StoreData, MinStack);/*通过访问StoreData存放的数据 找到栈中的最小的数值*/
	/*实现求解最大栈*/
	/*resultMax = GatMax(StoreData, MaxStack);*//*通过访问StoreData存放的数据 找到栈中的最小的数值*/
	/*printInfo("最小栈的数值为:%d\n   最大栈的数值为:%d\n", resultMin, resultMax);*/
	/*输入数字数据*/
	return 0;
}

你可能感兴趣的:(算法,数据结构)