69,371
社区成员
发帖
与我相关
我的任务
分享
1 #define MAX_SIZE 100#include <iostream>
class Stack //只为演示算法,不考虑栈溢出与栈空等特殊情况,不考虑类的设计风格
{
public:
Stack():size(0),minIndex(-1)
{
link[0]=-1;
}
int min()
{
return size==0 ? (int)1e6:stack[minIndex];
}
void push(int n)
{
if(n<min())
{
link[size]=minIndex;
minIndex=size;
}
else
{
link[size]=-1;
}
stack[size++]=n;
}
int pop()
{
if(minIndex==size-1)
{
minIndex=link[minIndex];
}
return stack[--size];
}
private:
enum
{
SIZE=100
};
int stack[SIZE];
int link[SIZE];
int size,minIndex;
};
int main()
{
Stack s;
s.push(2);
s.push(1);
s.push(7);
s.push(8);
for(int i=0;i<4;++i)
{
std::cout<<s.min();
std::cout<<" "<<s.pop()<<std::endl;
}
return 0;
}
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#define Maxsize 10
typedef struct
{
int a[Maxsize];
int top;
}Sqstack;
typedef struct
{
int b[Maxsize];
int top;
}Minstack;
void Push(Sqstack *&s,int num)
{
if(s->top > Maxsize-1)
{
printf("stack is full!\n");
exit(0);
}
s->top++;
s->a[s->top] = num;
}
void Push(Minstack *&t,int num)
{
if(t->top > Maxsize-1)
{
printf("stack is full!\n");
exit(0);
}
t->top++;
t->b[t->top] = num;
}
int Pop(Sqstack *&s)
int Pop(Sqstack *&s,Minstack *&t)
{
int k,num;
if(s->top == -1)
{
printf("stack is empty!\n");
exit(0);
}
num = s->a[s->top--];
k = Gettop(t);
if(k == num)
Pop(t);
return num;
}
int Pop(Minstack *&t)
{
int num;
if(t->top == -1)
{
printf("stack is empty!\n");
exit(0);
}
num = t->b[t->top--];
return num;
}
int Gettop(Minstack *s)
{
return s->b[s->top];
}
int main()
{
int i,k,num;
Sqstack *s;
Minstack *t;
s = (Sqstack*)malloc(sizeof(Sqstack));
s->top = -1;
t = (Minstack*)malloc(sizeof(Minstack));
t->top = -1;
scanf("%d",&num);
Push(s,num);
Push(t,num);
for(i = 1;i < Maxsize; i++)
{
scanf("%d",&num);
Push(s,num);
k = Gettop(t);
if(num < k)
Push(t,num);
}
min = Min(s,t);
/* while(s->top != -1)
{
k = Pop(s);
printf("%d ",k);
}
printf("\n");
while(t->top != -1)
{
k = Pop(t);
printf("%d ",k);
}
*/
getch();
return 0;
}