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

数据结构考研自用——静态顺序栈的实现【王道/严蔚敏C语言版】

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

数据结构考研自用——静态顺序栈的实现【王道/严蔚敏C语言版】

顺序栈的实现比较简单,需要注意的是top指针初始化的值,为-1时指向的是栈顶元素,为0时指向的是栈顶元素的下一个元素位置。top指针初始化值的不同也会带来后续Push和Pop操作时的不同(是先移动栈顶指针再赋值,还是相反),这点在写代码时尤其需要注意。这里实现时top指针初始化为-1,也就是指向栈顶元素,并且是以静态数组的形式实现的,无法扩充数组大小,有兴趣的同学也可以尝试使用动态数组实现,其思路与动态顺序表相似,在栈满上溢时分配额外的空间给栈。

下面是顺序栈的实现代码,使用ide为vs2019。

SeqStack.h

#define _CRT_SECURE_NO_WARNINGS

#include 
#include 

#define ElemType int
#define MaxSize 10

//顺序栈定义
typedef struct{
	ElemType data[MaxSize];
	int top;	//栈顶指针
}SeqStack;

void InitStack(SeqStack &s);	//初始化栈
void PrintStack(SeqStack s);	//打印栈
bool Push(SeqStack& s, ElemType e);		//元素进栈
bool Pop(SeqStack& s, ElemType& e);		//元素出栈
bool isEmpty(SeqStack s);		//判空
bool isfull(SeqStack s);		//判满
bool GetTop(SeqStack s, ElemType& e);	//查找栈顶元素

SeqStack.c

#include "SeqStack.h"

void InitStack(SeqStack& s) {
	s.top = -1;		//top指向栈顶元素
}


bool isEmpty(SeqStack s) {
	return(s.top == -1);
}

bool isfull(SeqStack s) {
	return(s.top == MaxSize);
}

void PrintStack(SeqStack s) {
	if (isEmpty(s)) {
		printf("栈空!n");
		return;
	}
	printf("从栈底到栈顶:");
	for (int i = 0; i <= s.top; i++) {
		printf("%d    ", s.data[i]);
	}
	printf("n");
}


bool Push(SeqStack& s, ElemType e) {
	if (isfull(s)) {
		printf("栈满!操作失败n");
		return false;
	}
	s.data[++s.top] = e;	//注意++s.top和s.top++的区别,一个是先移动top指针再赋值,一个是先赋值再移动top指针
	return true;
}

bool Pop(SeqStack& s, ElemType& e) {
	if (isEmpty(s)) {
		printf("栈空!操作失败n");
		return false;
	}
	printf("%d出栈!n", s.data[s.top]);
	e = s.data[s.top--];
	return true;
}

bool GetTop(SeqStack s, ElemType& e) {
	if (isEmpty(s)) {
		printf("栈空!n");
		return false;
	}
	e = s.data[s.top];
	return true;
}

main.c

#include "SeqStack.h"

//测试
void main() {
	SeqStack s;
	ElemType e;

	InitStack(s);
	Push(s, 1);
	Push(s, 2);
	Push(s, 3);
	PrintStack(s);
	Pop(s, e);
	printf("e:%dn", e);
	PrintStack(s);
	GetTop(s, e);
	printf("e:%dn", e);
	
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976881.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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