栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【数据结构】计算机考研随记【栈】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【数据结构】计算机考研随记【栈】

顺序栈
// LIFO:Last IN First Out 后进先出 

#define Maxsize 10  // 定义栈中元素的最大个数 

typedef struct {
	int data[Maxsize];  // 静态数组存放栈中元素
	int top;  // 栈顶指针
} SqStack;

// 初始化栈
void InitStack(SqStack &S) {
	S.top=-1;  // 初始化栈顶指针
}

// 还有一种初始化方法
// 让top指向下一个可以插入元素的位置,而不是最后一个位置 
// 即初始化时S.top=0,之后判断栈满|空的条件分别改变就行 

// 判断栈空
bool StackEmpty(SqStack S) {
	return (S.top==-1);  // top=-1表示栈空
}

// 判断栈满
bool StackFull(SqStack S) {
	return (S.top==Maxsize-1);  // top=Maxsize-1表示栈满
}

// 新元素入栈
bool Push(SqStack &S,int x) {
	if (S.top==Maxsize-1)return false;  // 栈满报错
	S.top=S.top+1;  // 指针先加1
	S.data[S.top]=x;  // 新元素入栈
	// 或者换个更高级的写法
	// S.data[++S.top]=x;
	return true;
}

// 出栈操作
bool Pop(SqStack &S, int &x) {
	if(S.top==-1)return false; // 栈空报错
	x=S.data[S.top];  // 栈顶元素先出栈
	S.top=S.top-1;  // 指针再减1
	// 高级写法
	// x=S.data[S.top--];
	return true;
}

// 读取栈顶元素
bool GetTop(SqStack S,int &x){
	if(S.top==-1)return false; // 栈空报错
	x=S.data[S.top];  // x记录栈顶元素 
	return true;
} 
//
//int main() {
//	SqStack S;  // 声明一个顺序栈
//	return 0;
//}
链栈
typedef struct Linknode {
	int data;  // 数据域
	struct Linknode *next;  // 指针域
} *LiStack;  // 栈类型定义

// 对应在单链表那一节的内容
// 区别在于只能在表头的位置插入和删除,表示进栈出栈

// 推荐采取不带头结点的单链表实现。 
共享栈
// 共享栈就是同一片内存空间中逻辑上的两个栈双向奔赴的过程
#define Maxsize 10  // 定义栈中元素的最大个数 

typedef struct {
	int data[Maxsize];  // 静态数组存放栈中元素
	int top0;  // 0号栈栈顶指针
	int top1;  // 1号栈栈顶指针
} ShStack;

// 初始化栈
void InitStack(ShStack &S) {  // 初始化栈顶指针 
	S.top0=-1;
	S.top1=Maxsize;
}

// 栈满的条件
// top0+1=top1 

//int main() {
//	ShStack S;  // 声明一个共享栈
//	return 0;
//}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/926144.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号