数据结构和算法—顺序栈

栈的原理:后进先出

#include <iostream>
#include <Windows.h>
#include <stdio.h>

#define MAX_STACK	100	//最大入栈的数量
//顺序栈的定义
typedef int ELEM;
typedef struct _Stack{
	ELEM* base;	//栈底
	ELEM* top;	//栈顶
}Stack;

// 初始化栈
bool initStack(Stack& s) {
	s.base = new ELEM[MAX_STACK];
	if(!s.base) return false;
	
	s.top = s.base;
	return true;
}

//判断空栈
bool isEmpty(Stack& s) {
	if(s.base == s.top) return true;

	return false;
}

//判断满栈
bool isFull(Stack& s) {
	if(s.top - s.base == MAX_STACK) return true;

	return false;
}

// 入栈,压栈
bool pushStack(Stack& s, ELEM& e) {
	if(isFull(s)) return false;
	
	*s.top = e;
	s.top++;
	return true;
}

//出栈,弹栈
bool popStack(Stack& s, ELEM& e) {
	if(isEmpty(s)) return false;

	e = *(--s.top);
	
	return true;
}

// 获取栈顶元素
bool getStack(Stack& s, ELEM& e) {
	if(isEmpty(s)) return false;
	
	e = *(s.top-1);
	return true;
}

//获取长度
int length(Stack& s) {
	return (s.top - s.base);
} 

// 栈的销毁
void destroy(Stack& s) {
	if(s.base) delete[] s.base;

	s.base = s.top = NULL;
}

int main(void) {
	Stack s;
	ELEM e;
	// 初始化栈
	initStack(s);

	//入栈10哥元素
	for(int i=0; i<10; i++) {
		e = i+1;
		if(pushStack(s, e)) {
			printf("入栈成功, 入栈元素为%d\n", e);
		} else {
			printf("入栈失败\n");
		}		
	}

	//获取长度
	printf("长度为:%d\n", length(s));

	//获取栈顶元素
	if(getStack(s, e)) {
		printf("栈顶元素为:%d\n", e);
	}
	//栈的销毁
	// destroy(s);

	// 出栈4个元素
	for(int i=0; i<4; i++) {
		if(popStack(s, e)) {
			printf("出栈成功,出栈元素为:%d", e);
		} else {
			printf("出栈失败\n");
		}
	}
	
	
	system("pause");
	return 0;
}

测试图如下:
在这里插入图片描述

发布了18 篇原创文章 · 获赞 2 · 访问量 223

猜你喜欢

转载自blog.csdn.net/weixin_44238530/article/details/102649643
今日推荐