现在的位置: 首页 > 综合 > 正文

栈的基本操作

2019年04月22日 ⁄ 综合 ⁄ 共 1050字 ⁄ 字号 评论关闭

源于一道面试题:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。

总结学习了栈的基本操作。

代码如下:

#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#define SIZE 5

typedef struct SqStack
{
	int *top;
	int *base;
	int stackSize;
};

void InitStack(SqStack *s)
{
	s->base=(int*)malloc(SIZE*sizeof(int));
	if(!s->base)
		exit(-1);
	s->top=s->base;
	s->stackSize=SIZE;
}//定义SqStack *对应->,没有*对应.。 

int GetTop(SqStack s)
{
	int e=*(s.top-1);
	return e;
}

void Push(SqStack *s,int e)
{
	if(s->top-s->base>=s->stackSize)
	{
		s->base=(int*)realloc(s->base,(s->stackSize+SIZE)*sizeof(int));
		if(!s->base)
			exit(-1);
		s->top=s->top+s->stackSize;
		s->stackSize+=SIZE;
	}
	*(s->top)++=e;
}

int Pop(SqStack *s)
{
	if(s->base==s->top)
		return 0;
	int e=*(--s->top);
}

void Traverse(SqStack s)
{
	if(s.base==s.top)
		cout<<"空栈";
	while(s.top!=s.base)
	{
		cout<<*(--s.top)<<" ";
	}
}

void main()
{
	SqStack s;
	SqStack smin;
	InitStack(&s);
	InitStack(&smin);
	int a[SIZE],i;
	for(i=0;i<SIZE;i++)
	{
		cin>>a[i];
		Push(&s,a[i]);
	}

	int e1=GetTop(s);
	Push(&smin,e1);
	Pop(&s);
	while(s.top!=s.base)
	{
		int e=GetTop(s);
		if(e<GetTop(smin))
		{
			Push(&smin,e);
		}
		Pop(&s);
	}//求最小值。smin的栈顶永远是最小值

	cout<<"最小值:"<<GetTop(smin)<<endl;
}

抱歉!评论已关闭.