码迷,mamicode.com
首页 > 其他好文 > 详细

设计包含min函数的栈

时间:2016-05-06 12:53:15      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。

要求函数min、push以及pop的时间复杂度都是O(1)。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct MinStackElement
{
    int data;
    int min;
}MinStackElement_T;

typedef struct MinStack 
{
   MinStackElement_T* data;
   int size;
   int top;
}MinStack_T;

MinStack_T stack;

void MinStackInit(int maxSize)
{
   stack.size = maxSize;
   stack.top= 0;
   stack.data= (MinStackElement_T*) malloc(sizeof(MinStackElement_T)*maxSize);
   memset(stack.data, 0, sizeof(MinStackElement_T)*maxSize);
   return;
}

void MinStackFree()
{
   free(stack.data);
}

void MinStackPush(int d) 
{
   if(stack.top == stack.size)
   {
   	   printf("out of stack space.");
       return;
   }
   MinStackElement_T* p = &stack.data[stack.top];
   p->data= d;
   p->min= (stack.top == 0? d : stack.data[stack.top-1].min);
   if(p->min > d)
   	   p->min = d;
   stack.top++;
}

int MinStackPop()
{
    if(stack.top <= 0)
    {
		printf("stack is empty!\n");
        return -1;
	}
   return stack.data[--stack.top].min;
}

int MinStackMin() 
{
    if(stack.top == 0)
    {
		printf("no min element!\n");
		return -1;
    }
	return stack.data[stack.top-1].min;
}

int main(void)
{
    MinStackInit(8);
	
    MinStackPush(10);
	printf("%d\n",MinStackMin());
	MinStackPush(7);
	printf("%d\n",MinStackMin());
	MinStackPush(3);
	printf("%d\n",MinStackMin());
	MinStackPush(3);
	printf("%d\n",MinStackMin());
	MinStackPush(8);
	printf("%d\n",MinStackMin());
	MinStackPush(5);
	printf("%d\n",MinStackMin());
	MinStackPush(2);
	printf("%d\n",MinStackMin());
	MinStackPush(6);
	printf("%d\n",MinStackMin());
	printf("------------------------\n");
	printf("%d\n",MinStackMin());
	MinStackPop();
	printf("%d\n",MinStackMin());
	MinStackPop();
	printf("%d\n",MinStackMin());
	MinStackPop();
	printf("%d\n",MinStackMin());
	MinStackPop();
	printf("%d\n",MinStackMin());
	MinStackPop();
	printf("%d\n",MinStackMin());
	MinStackPop();
	printf("%d\n",MinStackMin());
	MinStackPop();
	printf("%d\n",MinStackMin());
	MinStackPop();
	printf("%d\n",MinStackMin());
	MinStackPop();
	printf("%d\n",MinStackMin());
	MinStackPop();
	printf("%d\n",MinStackMin());
	
	MinStackFree();

	/*打印
	10
	7
	3
	3
	3
	3
	2
	2
	------------------------
	2
	2
	3
	3
	3
	3
	7
	10
	no min element!
	-1
	stack is empty!
	no min element!
	-1
	stack is empty!
	no min element!
	-1
	*/
    return 0;
}


设计包含min函数的栈

标签:

原文地址:http://blog.csdn.net/qisefengzheng/article/details/51329789

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!