堆栈之数组实现

堆栈

  • 先入后出

数组实现

  • 缺点:需要先申请指定大小的内存,需要检验是否非空是否栈满。
  • 操作:生成堆栈、检验非空、检验是否已满、入栈(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--

用一种方法

  • 用一个数组实现两个栈,有空间就能push。

初始化

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)++];
	}
}
原文地址:https://www.cnblogs.com/vancasola/p/7624232.html