·什么是栈
栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另外一端称为栈底。不含任何元素的栈称为空栈,栈又称为先进后出的线性表。
下面我我们画出一个链式栈的图:
那么在栈中的出栈和入栈就像下面一样:
·代码及其实现
·Stack.c
#include<stdio.h>
#include<stdlib.h>
#define maxsize 100
struct SqStack
{
int data[maxsize];
int top;
};
typedef struct SqStack SqStack;
typedef struct SqStack *pSqStack;
//初始化栈
void InitSqStack(pSqStack st)
{
st->top = -1;
}
int Push(pSqStack st,int x)
{
st->data[st->top] = x;
return st->data[st->top];
st->top++;
}
int Pop(pSqStack st)
{
return st->data[st->top];
st->top--;
}
int FindMin(pSqStack st)
{
int min = 5;
Push(st, 5);
if (st->data[st->top] <= min)
{
Push(st, 5);
min = st->data[st->top];
}
else
Push(st, min);
Push(st,3);
if (st->data[st->top] <= min)
{
Push(&st, 3);
min = st->data[st->top];
}
else
Push(&st, min);
Push(st, 4);
if (st->data[st->top] <= min)
{
Push(st, 4);
min = st->data[st->top];
}
else
Push(st, min);
Push(st, 1);
if (st->data[st->top] <= min)
{
Push(&st, 1);
min = st->data[st->top];
}
else
Push(&st, min);
return st->data[st->top];
}
void EnQueue(pSqStack st1,int x)
{
Push(st1, x);
}
void DeQueue(pSqStack st1, pSqStack st2)
{
int cur = 0;
while (st1->top != -1)
{
cur = Pop(&st1);
Push(&st2, cur);
}
Pop(&st2);
while (st2->top != -1)
{
cur = Pop(&st2);
Push(&st1, cur);
}
}
int main()
{
pSqStack st1;
pSqStack st2;
InitSqStack(&st1);
InitSqStack(&st2);
system("pause");
return 0;
}