堆栈
- 先入后出
数组实现
- 缺点:需要先申请指定大小的内存,需要检验是否非空是否栈满。
- 操作:生成堆栈、检验非空、检验是否已满、入栈(PUSH),出栈(POP)。
初始化
#define MAXSIZE 100
typedef struct SNode *Stack;
struct SNode
{
int data[MAXSIZE];
int top;
};
PUSH
void Push(Stack PtrS, int item)
{
if (PtrS->top == MAXSIZE - 1)
{
printf("FULL");
return;
}//检验满栈
else
{
PtrS->data[++(PtrS->top)] = item;
return;
}//top++并且存入数据
}
POP
int Pop(Stack PtrS)
{
if (PtrS->top == -1)
{
printf("Empty!");
return;
}//检验非空
else
return (PtrS->data[(PtrS->top)--]);
}//return数据并且top--
用一种方法
初始化
struct DStack
{
int data[MAXSIZE];
int top1;
int top2;
};
PUSH
void Push(struct DStack *PtrS, int x, int tag)
{
if (PtrS->top2 - PtrS->top2 == 1)//检验已满
{
cout << "FULL";
return;
}
if (tag == 1)PtrS->data[++(PtrS->top1)] = x;
else PtrS->data[--(PtrS->top2)] = x;
}
POP
int Pop(struct DStack *PtrS, int tag)
{
if (tag == 1) {
if (PtrS->top1 == -1) {
cout << "Stack 1 is empty.";
return NULL;
}
else return PtrS->data[(PtrS->top1)--];
}
else {
if (PtrS->top2 == MAXSIZE) {
cout << "Stack 2 is empty";
return NULL;
}
else return PtrS->data[(PtrS->top2)++];
}
}