typedef struct DataType
{
int data;
int min;
}DataType;
typedef struct stack
{
DataType* _a;
int _size;
}Stack;
初始化
oid StackInit(Stack* st )
{
st->_a = (DataType*)malloc(1000*sizeof(DataType));
st->_size = 0;
}
打印栈
void StackPrint(Stack st)
{
int i;
if (st._size == 0)
{
printf("该栈为空!\n");
}
else
{
for (i = 0;i < st._size;i++)
{
printf("%d ",st._a[i].data);
}
}
}
插入数据
void StackPush(Stack* st, int x)
{
if (st->_size == 0)
{
st->_a[st->_size].data = x;
st->_a[st->_size].min = x;
st->_size++;
return;
}
else
{
if (x < st->_a[st->_size - 1].min)
{
x = st->_a[st->_size].min;
}
else
{
st->_a[st->_size].min = st->_a[st->_size - 1].min;
}
}
st->_a[st->_size].data=x;
st->_size++;
}
删除数据
void StackPop(Stack* st)
{
if (st->_size == 0)
{
printf("该栈为空!\n");
}
else
{
st->_size--;
}
}
typedef struct StoQ
{
Stack* st1;
Stack* st2;
} StoQ;
模拟队列初始化
void StoQinit(StoQ* p)
{
StackInit(p->st1);
StackInit(p->st2);
}
模拟队列插入数据
void StoQinit(StoQ* p)
{
StackInit(p->st1);
StackInit(p->st2);
}
模拟队列删除数据
void Stackpop(StoQ* p)
{
DataType x = 0;
if (p->st2->_top==0)
{
while (p->st1->_top != 0)
{
x = p->st1->_array[(p->st1->_top) - 1];
StackPush(p->st2,x);
StackPop(p->st1);
}
}
StackPop(p->st2);
}
typedef struct QtoS { Queue *q1; Queue *q2; } QtoS;
初始化
void QtoSinit(QtoS* p)
{
QueueInit(p->q1);
QueueInit(p->q2);
}
插入数据
void QtoSpush(QtoS* p, DataType x)
{
QueuePush(p->q1, x);
}
删除数据
void QtoSpop(QtoS* p)
{
if (p->q1->_head->_next == NULL)
{
return;
}
else
{
while (p->q1->_head->_next->_next != NULL)
{
QueuePush(p->q2,p->q1->_head->_data);
QueuePop(p->q1);
}
QueuePop(p->q1);
while (p->q2->_head != NULL)
{
QueuePush(p->q1, p->q2->_head->_data);
QueuePop(p->q2);
}
}
}