【演算法】設計包含 min函式的棧,時間複雜度都是 O(1)

pengfoo發表於2012-09-27

設計包含 min函式的棧。
定義棧的資料結構,要求新增一個 min 函式,能夠得到棧的最小元素。
要求函式 min,push 以及 pop 的時間複雜度都是 O(1)

以下程式採用順序連結串列實現,實現時參考了相關部落格,有疏漏之處,歡迎指正。

思路:以空間換時間的方法

#include<stdio.h>
#define MAXSIZE 256

typedef struct minStackElement
{
	int value;
	int min;
}MinStackElement;

typedef struct minStack
{
	MinStackElement data[MAXSIZE];//本來棧中只有一個元素,現在擴充套件成結構體,用來存放min
	int top;
}MinStack;

int Init(MinStack *p)
{
	int i;
	for(i=0; i<MAXSIZE; i++)
	{
		p->data[i].value=0;
		p->data[i].min=0;
	}

	p->top = 0;
	return 0;
}


int Push(MinStack *p, int d)
{
	if(p->top == MAXSIZE)
	{
		printf("stack full");
		return -1;
	}
	p->data[p->top].value = d;
	p->data[p->top].min = (p->top == 0 ? d : p->data[p->top-1].min);
	if(p->data[p->top].min > d)
		p->data[p->top].min = d;
	p->top++;
	return 0;
}

int Pop(MinStack *p)
{
	if(p->top == 0)
	{
		printf("empty");
		return -1;
	}
	return p->data[p->top--].value;
}

int getMin(MinStack *p)
{
	if(p->top == 0)
	{
		printf("empty");
		return -1;
	}
	return p->data[p->top-1].min;
}

int main()
{
	int min;
	MinStack ms;
	MinStack *p = &ms;
	Init(p);
	Push(p,11);
	Push(p,2);
	Push(p,35);
	Push(p,46);
	Push(p,77);
	Push(p,56);
	Push(p,175);
	Push(p,1);
	min = getMin(p);
	printf("min=%d\n",min);
	
}

相關文章